1 概述
这是一份当前的技术选型方案,针对创业、中小型公司
2 目标
2.1 产品目标
2.1.1 SaaS
2.1.1.1 免安装
2.1.1.2 多租户
2.1.1.3 流量计费
2.1.2 可配置
2.1.2.1 需开通服务
2.1.2.2 服务自动组合
2.1.2.3 服务单独结算
2.1.3 可定制
2.1.3.1 私有云部署
2.1.3.2 按特殊需求开发
2.1.4 可量化
2.1.4.1 SLA服务可用性
2.1.4.2 各个服务质量统计
2.1.4.3 改进建议
2.2 技术目标
2.2.1 LTS平台
2.2.1.1 语言稳定版本
• Java 11
• Scala 2.12 (2.13)
• PHP 8.*
• Go 1.*
• Python 3.7.*
• ES 2017
2.2.1.2 框架稳定版本
• Spring Boot 2.1.* (Greenwich)
• Spring Framework 5.*
• Laravel 5.8.*
• Beego 1.10.*
• NodeJS 10.15.*
• Npm 6.7.*
• Vue 2.*
• React 16.8.*
• React Native 0.59
• Electron 4.1.1
2.2.1.3 服务器和容器稳定版本
• Centos 7.*
• Docker CE 18.09 (or 19.03)
• Kubernetes 1.14
2.2.2 DevOps模式
2.2.2.1 指导原理
• 原则
• 方法
• 实践
• 工具
2.2.2.2 实际应用微服务
• 微服务
• CI/CD
• A/B, 灰度
2.2.2.3 敏捷精益开发
• 共识
• 看板/Scrum
• Milestone,Sprint和Backlog文档
• XP极限编程
• TDD
• Code Review
• Full-Stack 全栈开发
2.3 运维目标
2.3.1 企业级
2.3.1.1 高可用
2.3.1.2 高性能
2.3.1.3 可扩展
2.3.1.4 自动备份
2.3.2 自动化
2.3.2.1 脚本化
2.3.2.2 界面化
2.3.2.3 规模化
2.3.3 可配置
2.3.3.1 友好操作界面
2.3.3.2 弹性伸缩
2.3.3.3 资源限制
2.3.4 安全性
2.3.4.1 权限控制
2.3.4.2 日志记录
2.3.4.3 端口,白名单限制
2.3.5 可预警
2.3.5.1 资源预警
2.3.5.2 黑客攻击
2.3.5.3 核心业务不可用
2.3.6 自我修复
2.3.6.1 丢失数据修复
2.3.6.2 内部异常流量控制
2.3.6.3 DDoS防护
2.3.6.4 漏洞修复
2.3.6.5 木马、后门修复
3 技术选型
3.1 数据库选型
3.1.1 MySQL
3.1.1.1 Natural key 和 Surrogate key
Surrogate Key不允许修改。
原则上都设置一个Surrogate Key,减少主从、分库分表、分布式等造成的问题。
3.1.1.2 Foreign key
通过Surrogate Key进行外键关联。
3.1.1.3 Relation
关联查询最好两表以内,极限三表。更多业务需求操作可通过缓存+内存,业务报表统计走数据仓库。
3.1.1.4 Data redundancy
互联网产品字段数据冗余在所难免,如不能或不方便通过缓存在前台拼接的只读数据,通过字段冗余实现,减少关联查询。
3.1.2 MyCAT
3.1.3 Sharding-JDBC
3.1.4 Vitness
3.1.5 Neo4j
3.1.6 MongoDB
3.2 发号器选型
3.2.1 UUID
优点
• 本地生成,低延时;
• 无需发布,不需要RPC或者REST接口;
• 扩展性好,基本没有性能上限。
缺点
• 生成的串过于随机,无法保证趋势递增,Range查询比较困难;
• UUID过长128位,不易存储,往往用字符串表示;
• 网络传输需要传送更多的字节,并且如果是用在业务上(例如让用户报订单号进行技术支持),会不太方便。
3.2.2 Snowflake(推荐)
优点:
• 分布式生成,无单点;趋势递增,生成效率快
缺点:
• 没有全局时钟的情况下,只能保证趋势递增;
• 当通过NTP进行时钟同步时可能会出现重复ID;
• 数据间隙较大
3.2.2.1 Twitter Snowflake
Twitter开源的Scala程序,基于时间戳,开源分布式发号器鼻祖,不维护了。
3.2.2.2 百度 UidGenerator
嵌入式
3.2.2.3 Vesta-id-generator
嵌入式、集中式、REST
3.2.3 Redis + MongoDB
自研, Redis集群 + Lua脚本 + MongoDB
3.3 缓存选型
3.3.1 CDN 静态资源
3.3.2 DNS
3.3.3 OSS/S3
3.3.4 SLB
3.3.5 Client – Browser
3.3.6 Web - Nginx
3.3.7 Distribute Object – Redis(内存数据缓存), SSDB
3.3.8 Monolithic – Ehcache
3.3.9 Application – JVM/PHP Cache
3.3.10 Database Cache
3.3.11 CPU Cache
3.4 RPC选型
3.4.1 Dubbo 70%的国内公司使用,
3.4.2 gRPC
3.4.3 Thrift
3.5 服务代理选型
3.5.1 Nginx
3.5.2 Envoy
3.5.3 Traefik
3.6 API网关选型
3.6.1 Kong
3.6.2 Sentinel
3.7 Service Mesh选型
3.7.1 Zuul
3.7.2 Linkerd
3.7.3 Istio
3.8 消息中间件选型
3.8.1 Kafka 大数据日志处理,10万+
3.8.2 RabbitMQ 5万+
3.8.3 RocketMQ 分布式10万+
3.9 协调/服务发现选型
3.9.1 Eureka
3.9.2 Consul
3.9.3 Zookeeper 强一致性
3.9.4 Etcd
3.10 日志选型
3.10.1 ELK
3.10.2 Fluentd
3.10.3 Grafana Loki
3.10.4 Scalyr
3.11 追踪调用选型
3.11.1 OpenTracing
3.11.2 Zipkin
3.11.3 Jaeger
3.12 混沌选型
3.12.1 Chaos Toolkit
3.12.2 Chaos Kube
3.13 分布式调度选型
3.13.1 Quartz
3.13.2 XXL-Job
3.13.3 Helix
3.13.4 DKron
3.13.5 Bistro
3.13.6 Cronicle
3.14 DevOps选型
3.14.1.1 Dev - Virtual Box, Vagrant
3.14.2 Issue, Error Tracking - Sentry
3.14.3 CI – Gitlab, Jenkins
3.14.4 CD – Docker, Kubernetes
3.14.5 Analytics– Grafana, Zabbix, Prometheus
3.15 规则引擎选型
3.15.1 Drools
3.15.2 jBPM
3.15.3 OptaPlanner
3.16 秘钥管理选型
3.16.1 Vault
3.16.2 Keycloak
3.16.3 Gravitational
3.17 大数据选型
3.17.1 Storage – HDFS, Rook, OpenIO, Ceph
3.17.2 Data Integration – Kettle, Alooma, MuleSoft, Talend, Panoply
3.17.3 实时计算 – Spark Streaming,Flink
3.18 AI选型
3.18.1 Deep Learning, Machine Learning – 深度/机器学习
3.18.2 NLP Platforms – 智能助理/客服
3.18.3 Predictive APIs – 智能预测
3.18.4 Image Recognition – 图像识别
3.18.5 Speech Recognition – 语音识别
3.19 后台选型
3.19.1 Spring Boot/Cloud
3.19.2 Laravel
3.20 中台选型
3.20.1 Flask
3.20.2 Beego, Echo
3.20.3 Adonisjs, Meteorjs
3.21 前台选型
3.21.1 Vue, React
3.21.2 Electron
3.21.3 React-native
3.22 测试选型
3.22.1 Java – JUnit, Mockito
3.22.2 PHP – PhpUnit, Mockery
3.22.3 JavaScript – Jestjs, Chai
3.22.4 Browser – Selenium, Puppeteer
3.22.5 Performance – JMeter, Locust, Tricentis Flood
3.23 运维选型
3.23.1 Automation – Ansible, Puppy, SalkStack
3.23.2 Configuration – Apollo
3.23.3 Planning – Terraform
3.23.4 Self-Service – RunDeck
3.24 项目管理选型
3.24.1 JIRA
3.24.2 Confluence
3.24.3 Swagger
3.24.4 apiDoc
3.24.5 Postman
3.24.6 钉钉
3.24.7 企业微信
4 开发平台及工具
4.1 基础环境
4.1.1 HomeBrew – git, tree, aria2
4.1.2 Virtual Box
4.1.3 Vagrant
4.1.4 Docker - Desktop Version, Docker Plugin, Dry
4.1.5 Kubernates - Minikube
4.1.6 MySQL Client - DataGrip, Navicat
4.2 后台开发
4.2.1 Java – JDK, jenv, IntelliJ IDEA, maven, gradle, sbt
4.2.2 PHP – PhpStorm
4.3 中台开发
4.3.1 Go – Go SDK, GoLand
4.3.2 Python – Pip, PyCharm
4.3.3 NodeJS – Npm, WebStorm
4.4 前台开发
4.4.1 JavaScript – Virtual Studio Code, ES6, TypeScript, LESS, SASS
4.4.2 App – React Native
4.4.3 Desktop – Electron
4.4.4 Compatible – Babel
4.4.5 Package – Bower, Grunt, Webpack
4.4.6 Code Style – ESLint,
4.4.7 SPA – React, Vue, Redux, Vuex
4.5 运维开发
4.5.1 Remote - SecureCRT
4.5.2 DevOps – Shell, Python
4.5.3 Sync – RSync