架构1:团队协助基础工具链的选型和培训
团队协助基础工具链, 主要是三大管理
- 项目管理
- 任务管理
- 问题管理
架构2:搭建微服务开发基础设施
搭建微服务开发基础设施需要考虑多个方面,包括但不限于以下几点:
- 选择合适的微服务框架和技术栈:目前比较流行的微服务框架有 Spring Cloud、Go-Micro、gRPC
等,选择适合自己团队技术栈的框架非常重要。 - 选择合适的RPC框架
- 构建基础设施:包括但不限于服务注册与发现、负载均衡、API 网关、分布式配置中心、分布式
锁、消息队列等。 - 安全:包括但不限于服务间通信的加密、访问控制、身份认证等。
常见的微服务框架和技术栈包括:
- Spring Cloud:适用于 Java 开发团队,具有丰富的功能和社区支持。
- Go Micro:适用于 Go 开发团队,具有高性能和简单易用的特点。
- Node.js + Express:适用于 JavaScript 开发团队,具有轻量级和快速开发的特点。
- Kubernetes:适用于需要高可用性和弹性的微服务架构,可以支持多种编程语言和框架。
- Istio:适用于需要服务网格功能的微服务架构,可以提供流量管理、安全性和可观察性等功能。
建议选用 SpringCloud Alibaba+ Dubbo RPC + Dubbo-Go,两个原因:
(1) 高性能: 尼恩的性能测试案例中, Dubbo比Feign性能 强10倍, 具体请参见尼恩博客
(2) 兼顾团队技术栈: 可以跨Go 和Java 多语言微服务架构,Java技术栈的同学们,可以基于 Java开
发业务微服务,这块侧重业务开发。Go 技术栈的同学们,可以基于 Go 开发高性能的 技术微服务,这
块侧重技术开发和性能优化。
(3)功能和性能兼顾: Java侧重功能的快速开发, Go侧重性能的快速提升。
架构3:选择合适的RPC框架
建议选用Dubbo,两个原因:
(1) 高性能: Dubbo比Feign性能 强10倍
(2) 跨语言: 可以跨Go 和Java 进行 双语言的 RPC调用,从而实现 多语言微服务架构。
架构4:选择和搭建高可用的注册中心
选择和搭建高可用的注册中心,需要考虑以下几个方面:
- 功能需求:选择注册中心时,需要根据自己的业务需求来选择,比如服务发现、负载均衡、配置管
理等。 - 性能要求:注册中心需要具备高性能,能够支持高并发、高吞吐量的请求。
- 可用性要求:注册中心需要具备高可用性,能够保证24小时不间断运行,避免因为单点故障导致
整个系统不可用。 - 安全要求:注册中心需要具备一定的安全性,能够保证数据的机密性和完整性,避免数据泄露和篡
改。
架构5:选择和搭建高可用的配置中心
统一配置系统是指在一个大型系统中,将所有的配置信息集中管理,以便于对系统进行管理和维护。常
见的统一配置系统架构包括以下几个组件:
- 配置中心:用于存储和管理所有的配置信息,提供配置查询、修改、删除等功能。
- 配置客户端:用于从配置中心获取配置信息,并将其应用到系统中。
- 配置发布工具:用于将配置信息发布到配置中心,以便于配置客户端获取。
- 配置管理工具:用于对配置信息进行管理和维护,包括配置的新增、修改、删除等操作。
- 配置监控工具:用于监控配置信息的变化,及时发现并处理配置信息的异常情况。
在实际应用中,可以选择使用开源的配置中心工具,如 ZooKeeper、Etcd、Consul 、Nacos、Apollo
等,也可以自己开发一套配置中心系统。
架构6:选择和搭建高性能的缓存中间件
在搭建高性能缓存中间件时,需要考虑以下几个方面:
- 硬件配置:缓存中间件需要占用大量内存,因此需要配置足够的内存和处理器资源。
- 部署架构:需要考虑缓存中间件的部署架构,如单节点、主从复制、集群等。
- 数据持久化:需要考虑数据持久化的方式,如内存快照、AOF 日志、RDB 文件等。
- 安全性:需要考虑缓存中间件的安全性,如访问控制、数据加密等。
- 监控和管理:需要考虑缓存中间件的监控和管理,如性能监控、故障诊断等
架构7:选择和搭建高性能的消息中间件
选择合适的消息中间件需要考虑多个因素,包括但不限于:
需要处理的消息数量和频率
消息的大小和格式
可用性和容错性要求
数据安全性和加密需求
扩展性和灵活性要求
开发语言和技术栈的兼容性
常见的消息中间件包括RocketMQ、Kafka、 RabbitMQ、Kafka、ActiveMQ、Redis、NATS 等,
每种中间件都有其特点和适用场景。
架构8:选择和搭建高性能的关系数据库
完整地支持 SQL,支持 JOIN / GROUP BY /子查询等复杂 SQL 查询。
支持传统数据标配的 ACID 事务,支持强隔离级别。
具有弹性伸缩的能力,扩容缩容对于业务层完全透明。
真正的高可用,异地多活、故障恢复的过程不需要人为的接入,系统能够自动地容灾和进行强一致
的数据恢复。
具备一定的大数据分析能力。
常见 NoSQL 有4个类型:
- 键值,适用于内容缓存,适合混合工作负载并发高扩展要求大的数据集,其优点是简单,查询速度
快,缺点是缺少结构化数据,常见的有 Redis,Memcache,BerkeleyDB 和 Voldemort 等等; - 列式,以列簇式存储,将同一列数据存在一起,常见于分布式的文件系统,其中以 Hbase,
Cassandra 为代表。Cassandra 多用于写多读少的场景,国内用得比较多的有 360,大概 1500
台机器的集群,国外大规模使用的公司比较多,如 eBay,Instagram,Apple 和沃尔玛等等; - 文档,数据存储方案非常适用承载大量不相关且结构差别很大的复杂信息。性能介于 kv 和关系数
据库之间,它的灵感来于 lotus notes,常见的有 MongoDB,CouchDB 等等; - 图形,图形数据库擅长处理任何涉及关系的状况。社交网络,推荐系统等。专注于构建关系图谱,
需要对整个图做计算才能得出结果,不容易做分布式的集群方案,常见的有 Neo4J,InfoGrid
等。
架构9:CICD发布系统/部署系统的架构
CI/CD 发布系统/部署系统的架构通常包括以下组件:
源代码管理系统:例如 Git、SVN 等,用于管理代码库。
持续集成工具:例如 Jenkins、GitLab CI、Travis CI 等,用于自动化构建、测试和打包应用程序。
制品仓库:例如 Docker Hub、Harbor、Aliyun Container Registry 等,用于存储应用程序的镜
像。
部署工具:例如 Kubernetes、Docker Swarm、Mesos 等,用于自动化部署应用程序。
业界免费的持续集成工具中系统我们有如下一些选择:
Jenkins:Java 写的有强大的插件机制,MIT 协议开源 (免费,定制化程度高,它可以在多台机器上进
行分布式地构建和负载测试)。Jenkins 可以算是无所不能,基本没有 Jenkins 做不了的,无论从小型
团队到大型团队 Jenkins 都可以搞定。不过如果要大规模使用,还是需要有人力来学习和维护。
TeamCity:TeamCity 与 Jenkins 相比使用更加友好,也是一个高度可定制化的平台。但是用的人多
了,TeamCity就要收费了。
Strider:Strider 是一个开源的持续集成和部署平台,使用 Node.js 实现,存储使用的是 MongoDB,
BSD 许可证,概念上类似 Travis 和Jenkins。
GitLab CI:从GitLab 8.0开始,GitLab CI 就已经集成在 GitLab,我们只要在项目中添加一个 .gitlabci.yml 文件,然后添加一个 Runner,即可进行持续集成。并且 GitLab 与 Docker 有着非常好的相互协
作的能力。
免费版与付费版本不同可以参见这里:https://about.gitlab.com/products/feature-comparison/。
Travis:Travis 和 GitHub 强关联;闭源代码使用 SaaS 还需考虑安全问题;不可定制;开源项目免费,
其它收费。
Go:Go 是 ThoughtWorks 公司最新的 Cruise Control 的化身。除了 ThoughtWorks 提供的商业支
持,Go 是免费的。它适用于 Windows,Mac 和各种 Linux 发行版。
架构10:360度全方位监控和维护的架构
360度全方位监控和维护的架构包括
日志系统
监控系统
架构11:生产环境高并发高吞吐负载均衡部署架构
高并发高吞吐负载均衡链路架构,包括:
DNS的选型和使用设计
LB(负载均衡)的选型和使用设计
CDN的选型和使用设计