亿级流量网站架构核心技术

交易型系统设计的一些原则

系统设计是一个不断迭代的过程,在迭代中发现问题并修复问题,即满足需求的系统是不断迭代优化出来的,这是一个持续的过程,个人不相信完美架构银弹。

一个好的设计要做到,解决现有需求和问题,把控实现和进度风险,预测和规划未来,不要过度设计,从迭代中演进和完善。

在设计系统时,应该多思考墨菲定律。

  • 1、任何事都没有表面看起来那么简单。
  • 2、所有的事都会比你预计的时间长。
  • 3、可能出错的事总会出错。
  • 4、如果你担心某种情况发生,那么它就更有可能发生。

在系统划分时,也要思考康威定律。

  • 1、系统架构是公司组织架构的反映。
  • 2、应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本。
  • 3、如果沟通出现问题,那么就应该考虑进行系统和组织架构的调整。
  • 4、在合适时机进行系统拆分,不要一开始就把系统/服务拆得非常细,虽然闭环,但是每个人维护的系统多,维护成本高。

另外,也要多思考二八定律,在系统设计初期将有限的资源用到刀刃上,以最小化可行产品方式迭代推进。

一、高并发原则

1、无状态

生产环境可能是这样的:应用无状态,配置文件有状态。

2、拆分

拆分主要有如下几种情况。

  • 系统维度:按照系统功能/业务拆分
  • 功能维度:对一个系统进行功能再拆分
  • 读写维度:根据读写比例特征进行拆分(有些聚合读取的场景,如商品详情页,可考虑数据异构拆分系统,将分散在多处的数据聚合到一处存储,以提升系统的性能和可靠性)
  • 模块维度:代码结构一般按照三层架构(Web、Service、DAO)进行划分

3、服务化

首先,判断是不是只需要简单的单点远程服务调用,随着调用方越来越多,应该考虑使用服务自动注册和发现,其次,还要考虑服务的分组/隔离,后期随着调用量的增加还要考虑服务的限流、黑白名单等。还有一些细节需要注意,如超时时间、重试机制、服务路由(能动态切换不同的分组)、故障补偿等,这些都会影响到服务的质量。

4、消息队列

息队列是用来解耦一些不需要同步调用的服务或者订阅一些自己系统关心的变化。使用消息队列可以实现服务解耦(一对多消费)、异步处理、流量削峰/缓冲等。使用消息队列时,还要注意处理生产消息失败,以及消息重复接收时的场景。

在使用了消息异步机制的场景下,可能存在消息的丢失,需要考虑进行数据校对和修正来保证数据的一致性和完整性。可以通过Worker定期去扫描原始表,通过对业务数据进行校对,有问题的要进行补偿,扫描周期根据实际场景进行定义。

5、数据异构

把使用到的数据进行异构存储,形成数据闭环:

  • 数据异构:通过如MQ机制接收数据变更,然后原子化存储到合适的存储引擎
  • 数据聚合:数据异构的目的是把数据从多个数据源拿过来,数据聚合的目的是把这些数据做个聚合

5、缓存银弹

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。