后台架构的十个维度

工作 · 2024-08-22

2024-08-22T03:37:10.png

架构1:团队协助基础工具链的选型和培训

团队协助基础工具链, 主要是三大管理

  • 项目管理
  • 任务管理
  • 问题管理

架构2:搭建微服务开发基础设施

搭建微服务开发基础设施需要考虑多个方面,包括但不限于以下几点:

  1. 选择合适的微服务框架和技术栈:目前比较流行的微服务框架有 Spring Cloud、Go-Micro、gRPC
    等,选择适合自己团队技术栈的框架非常重要。
  2. 选择合适的RPC框架
  3. 构建基础设施:包括但不限于服务注册与发现、负载均衡、API 网关、分布式配置中心、分布式
    锁、消息队列等。
  4. 安全:包括但不限于服务间通信的加密、访问控制、身份认证等。

常见的微服务框架和技术栈包括:

  1. Spring Cloud:适用于 Java 开发团队,具有丰富的功能和社区支持。
  2. Go Micro:适用于 Go 开发团队,具有高性能和简单易用的特点。
  3. Node.js + Express:适用于 JavaScript 开发团队,具有轻量级和快速开发的特点。
  4. Kubernetes:适用于需要高可用性和弹性的微服务架构,可以支持多种编程语言和框架。
  5. 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:选择和搭建高可用的注册中心

选择和搭建高可用的注册中心,需要考虑以下几个方面:

  1. 功能需求:选择注册中心时,需要根据自己的业务需求来选择,比如服务发现、负载均衡、配置管
    理等。
  2. 性能要求:注册中心需要具备高性能,能够支持高并发、高吞吐量的请求。
  3. 可用性要求:注册中心需要具备高可用性,能够保证24小时不间断运行,避免因为单点故障导致
    整个系统不可用。
  4. 安全要求:注册中心需要具备一定的安全性,能够保证数据的机密性和完整性,避免数据泄露和篡
    改。

架构5:选择和搭建高可用的配置中心

统一配置系统是指在一个大型系统中,将所有的配置信息集中管理,以便于对系统进行管理和维护。常
见的统一配置系统架构包括以下几个组件:

  1. 配置中心:用于存储和管理所有的配置信息,提供配置查询、修改、删除等功能。
  2. 配置客户端:用于从配置中心获取配置信息,并将其应用到系统中。
  3. 配置发布工具:用于将配置信息发布到配置中心,以便于配置客户端获取。
  4. 配置管理工具:用于对配置信息进行管理和维护,包括配置的新增、修改、删除等操作。
  5. 配置监控工具:用于监控配置信息的变化,及时发现并处理配置信息的异常情况。
    在实际应用中,可以选择使用开源的配置中心工具,如 ZooKeeper、Etcd、Consul 、Nacos、Apollo
    等,也可以自己开发一套配置中心系统。

架构6:选择和搭建高性能的缓存中间件

在搭建高性能缓存中间件时,需要考虑以下几个方面:

  1. 硬件配置:缓存中间件需要占用大量内存,因此需要配置足够的内存和处理器资源。
  2. 部署架构:需要考虑缓存中间件的部署架构,如单节点、主从复制、集群等。
  3. 数据持久化:需要考虑数据持久化的方式,如内存快照、AOF 日志、RDB 文件等。
  4. 安全性:需要考虑缓存中间件的安全性,如访问控制、数据加密等。
  5. 监控和管理:需要考虑缓存中间件的监控和管理,如性能监控、故障诊断等

架构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发布系统/部署系统的架构

2024-08-22T03:42:39.png

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的选型和使用设计

架构
Theme Jasmine by Kent Liao