zoukankan      html  css  js  c++  java
  • 技术总结

    马上要重新启程了, 要从传统行业转到互联网行业. 这里先在技术层面做点总结吧.

    ===================
    看好和看衰的技术和产品
    ===================
    看好:
    1. SQL 语言, 如果SQL语言加到编程语言排行榜, 肯定是第一. NoSQL带来的优点不足抵消SQL缺失带来的缺点.
    2. HP Vertica 数据仓库, X86硬件+MPP+列式存储+读写优化技术. Vertica不仅仅是一个MPP, 而且也是一个SQL on Hadoop产品, 可通过export parquet导出到hdfs, 也可以通过external table访问hdfs, Vertica 9版本将更进一步. 
    3. Python 和 Java 语言.
    3. Kettle ETL, 架构非常好, 部署也简单, 功能强大, 扩展性好. 可以用Java写插件, 可以写Java class, 这些扩展性能都很好. 采用JDBC的方式访问数据库, 其他ETL工具多采用ODBC的方式, 和ODBC相比, JDBC配置和部署都简单很多. 

    看衰:
    1. Informatica ETL 工具, 我是这个工具的死黑. 相比 Kettle/SSIS/Datastage, 这个工具不是为人服务, 而是人要为这个工具服务.
    2. Teradata 数据仓库, 原因是: 价格高, 产品封闭和bug很多, 技术已经落后.

    ===================
    数据仓库和BI
    ===================
    我接触的数仓数据量都在PB级以下, 只能给出这个量级的建议:
    1. >10TB, 建议选用HP Vertica. Teradata/Exadata 价格太高, Greenplum 稳定性较差.
    2. <10TB, 建议使用 Oracle R12, 建模做的好, 一般性能不是问题, 再不行上SSD硬盘, 或者上 Oracle shard. 也可以采用 SQL Server2012(因为SSIS很好用), EnterpriseDB(PostgreSQL)或bigsql(PostgreSQL).
    3. >PB, 也许只有Hadoop+Hive了.
    4. 实时大数据平台, OGG(或Debezium或Canal)+Kafka+Spark SQL+Vertica(或Kudu或HBase), 实时查询可以使用Vertica或Impala, PipelineDB知名度比SparkSQL差很多, 但它的使用方式和环境搭建更加简单.
    4. 离线大数据平台, Kettle+Vertica(或Hive或Impala), Vertica不仅仅是一个MPP, 而且也是一个SQL on Hadoop产品, 可通过export parquet导出到hdfs, 也可以通过external table访问hdfs, Vertica 9版本将更进一步.
    5. BI工具这块: Qlikview 不错, Microstragy/BO/Cognos 不建议. (Tableau 未使用过), 开源BI里面推荐Redash(Python)
    6. ETL工具: 推荐使用ELT方式, 也就是SQL+调度就行了, 当然如果一定需要ETL工具, Kettle最赞, SSIS 和 Datastage 次之. Informatic千万别用.
    7. 调度工具: 很多企业搞不清有了ETL工具, 为啥还需要调度工具. 我的观点是一定要有调度系统, 如果不涉及到Hadoop集群, 写一个一般功能的调度系统还是不难的, 开源的有Dolphi Scheduler 或 Airflow 或 Azkaban, Azkaban可以用Java开发插件.

    ===================
    数据库
    ===================
    关键的交易性数据库和一般的管理系统: 毫无疑问还是Oracle最好(性能, 稳定性).
    偏分析型数据库,如果嫌Oracle许可贵, 可选用 PostgreSQL.
    业务系统, 如果预期将来需要分表分库, 随大流选择MySQL没错, PostgreSQL就不推荐了.
    缓存系统: 可随大流选择Redis, 也可以考虑Cassandra.
    图数据库: 没怎么太深入了解, OrientDB/arangodb/neo4j 是较有名的图数据库.

    消息中间件: Apache Pulsar
    对象存储: MinIO

    ===================
    软件开发项目要点
    ===================
    1. 技术的选择: 使用久经考验的技术, 不要太求新, 同时避免花费大量时间纠结. 参考 instagram/stackoverflow 技术选型原则.
    2. 架构要简单, 要以解决业务为目的, 不应过早考虑高可用性, 系统扩展性, 大并发等问题.
    3. 要对:NoSQL/Micro-service/SOA/React/Vue/NodeJS 有一定免疫力.
    4. 要能正确地面对技术债务, 前期可以适当欠债以保证项目的快速交付, 但后期应及时偿还, 否则债务会像滚雪球越来越大.
    5. 开发环境要配好, 好的电脑, 双屏(至少2K), SSD硬盘投资小见效快, 好的网络, 好用的IDE.
    6. 搭建好Git(SVN也不错)
    7. 搭建一个好用的项目管理系统(比如禅道).
    8. 搭建腾讯TIM或RTX通讯环境, 当然沟通还是以邮件为主.
    9. 注重单元测试(不管是静态Java项目, 还是动态Python项目), 持续集成环境(比如jenkins等)
    10. 注重服务器部署自动化(比如使用jenkins和rundeck, 最好和git/svn+rsync结合着用)
    11. 搭建一个知识管理平台, 用于知识库管理/规范管理, 可以作wiki, 可以将word/excel等导入进去, 支持全文搜索, 可以记周报, 会议纪要. 商业软件可以选 Atlassian公司的confluence 系统,  开源的 Xwiki 也非常好(http://www.xwiki.org) 


    ===================
    再谈Python和Java
    ===================
    1. Python 和 Java 语言, 我一直钟爱 Python, Python是很强, 但 Java 老大地位还是值得尊重的.
    2. Python 是动态语言, 网上一句话, "动态语言一时爽,代码重构火葬场", 我基本认同这个讲法, 尤其对于我们普通水平的team, 能用Java优先用Java, 静态语言的IDE支持程度和编译的语法检查能在很大程度上减少bug.
    3. 根据项目的类型, 选择最合适的语言. 我认为Python只在下面两个场景下优于Java.
    (1)数据分析类和数据处理类项目, 这里的数据分析和处理不是指ETL类项目, 而是指需要做很多数值计算和统计.
    (2)脚本类程序.
    4. 如果选定了 Python 语言, 一定要选 Python 3.6 以上, 带有完整的类型annotation功能, 同时要使用mypy工具做静态类型检查.

    ===================
    编程层面推荐的一些技术
    ===================
    Http server: 推荐 Openresty(Nginx 的 bundle版), 高性能http服务器
    Java Web 容器(生产): Tomcat
    Java Web 容器(开发): Tomcat
    Java 框架: Spring framwork/Spring Boot
    Python WSGI(生产): Gunicorn(Linux)/CherryPy(跨平台)
    Python Web Framework: Flask/Django 
    Python应用实时监控平台sentry: https://sentry.io/

    前端(PC):
    JS库: JQuery, underscore
    UI框架/库:  LayUI, AdminLTE , Bootstrap, Fontawesome,GitHub Octicons
    Grid: ag-grid 或 jqgrid
    Chart: ECharts, pyecharts(使用ECharts作为渲染引擎的  python 库) 

    LayUI 的后台管理模板 ok-admin

    AdminLTE 是基于Bootstrap3的一套后台管理UI框架, 有很多现成模板可使用,  github star超2.5万. 
    github https://github.com/almasaeed2010/AdminLTE
    官网 https://adminlte.io/

    前端(移动): 企业内部应用或用户数不算多, 我个人还是比较推荐H5.
    JS库: Zepto, underscore
    UI框架/库: SUI-Mobile, Fontawesome, GitHub Octicons
    Chart: ECharts, 另外, Python bind https://github.com/chenjiandongx/pyecharts
    需要将腾讯X5浏览器内核一起打包, 用来替代原生WebView, 解决移动设备原生webview碎片化问题, 也支持几十种常见文档的在线浏览.

    移动开发选型: 阿里开源的 Weex 目前生态已经很不错, 是 react native 之外另一个比较成熟的 native 解决方案, 更多方案见 https://github.com/mishe/blog/issues/163

    ===================
    监控系统
    ===================
    监控系统推荐小米开源的open-falcon, 用一个就足够了, 不用考虑其他监控系统. open-falcon使用了 RRDTool 时间序列数据库, 承压能力很强, 自身有很好的展现界面, 如果觉得不好还可使用 Grafana. 系统做展现. 通过agent程序收集和push状态信息到服务器端, open-falcon已经支持很多监控项(CPU/Mem/JVM等)收集, 我们也可以自定义push指标,
    主页: http://open-falcon.org/
    http://book.open-falcon.org/zh/intro/index.html
    自定义push数据: http://book.open-falcon.org/zh/usage/data-push.html
    metrics的tag管理: https://book.open-falcon.org/zh_0_2/philosophy/tags-and-hostgroup.html
    https://blog.csdn.net/puma_dong/article/details/51895063

    ===================
    异常跟踪系统
    ===================
    sentry, 专注于程序异常logging的分析系统, 提供多个编程语言接口(Java/C#/Python等).
    https://docs.sentry.io/server/installation/
    http://www.cnblogs.com/weaming/p/5158142.html
    sentry raven-python 可以为 logging/logbook 提供handler.


    ===================
    分布式配置管理平台
    ===================
    携程开源的 apollo 系统是非常优秀的分布式配置管理系统, 支持prod/dev等多环境配置, 支持多系统. 官方已提供Java/C#客户端, 其他语言需要使用http协议访问配置平台.
    https://github.com/ctripcorp/apollo

    ===================
    大众点评的CAT系统
    ===================
    http://www.infoq.com/cn/articles/distributed-real-time-monitoring-and-control-system
    https://zhuanlan.zhihu.com/p/23351994
    CAT系统, 后台系统的埋点分析工具, 埋点后可以在CAT系统中分析我们的后台系统, 典型的使用场景有:
    1. 调用链分析, 分析一个完整调用链都包含哪些环节, 分析哪个环节耗时长
    2. Event或Exception埋点, 用户分析一些特别的Event.
    CAT埋点可以采用手动埋点方式, 也可以采用自动埋点(即使用官方log4j/logback/MyBatis的集成插件). 从功能上讲, CAT比Sentry系统更强大, Sentry重点是在exception分析上, 但CAT不足之处,在于仅支持Java语言.

  • 相关阅读:
    解决Redis Cluster模式下的排序问题
    zookeeper实现商品秒杀抢购
    zookeeper实现互斥锁
    用dubbo+zookeeper+spring搭建一个简单的http接口程序
    [置顶] 一个优秀的程序员怎样做好时间管理
    [置顶] BOF或EOF中有一个是“真”,或者当前的记录已被删除,所需的操作要求一个当前的记录。
    [置顶] 学生管理系统验收出现的问题及解决方法
    [置顶] 学生管理系统的常见问题
    如何让你成为一个专业的程序员(一)
    关于英语学习法
  • 原文地址:https://www.cnblogs.com/harrychinese/p/tech_summary.html
Copyright © 2011-2022 走看看