读《分布式应用系统架构设计与实践》

架构,对物理结构规划设计的一个过程。

系统设计、抽象、衍生、架构优化、构建、业务逻辑、数据存储、部署、(功能)模块、分离、数据传输、单台业务逻辑服务器、反向代理服务器、扩展、读写分离、用户粘性、拆分存储、用户裂变、访问量、缓存、流量分发、负载均衡、(技术)组件、异构、容灾、服务发现、服务注册、zookeeper和consul以及etcd、无服务器架构、函数计算(FaaS)、触发器(http、对象存储、消息队列、定时任务)、块存储、文件存储、对象存储、2PC协议

架构的设计优化需要:1、业务对系统有更高要求;2、模块处理能力有限需将系统有效切分;3、引入协调调度机制,协作能力。
架构目标:高性能、高可用性、可扩展性、可维护性
模块和组件:业务层面的功能;技术层面的服务。
框架:对实现某个技术组件服务规范的一种定义。组件是对框架的一种具体实现。
1、高性能:接入服务模式:实时同步接入RPC,实时异步接入队列,近线接入。数据访问瓶颈方式:读写切分(包括分库、分表),添加缓存。
2、高可用性:关注:出现故障后快速高效恢复。措施:各层服务冗余、故障自动发现机制。避免单点故障。各层:机房、机架、服务层、数据存储层。
3、扩展性:关注:实现资源自动扩容。服务无状态,服务发现组件。存储的数据理由分发:基于哈希的分片映射、基于数据范围的分区映射。
4、可维护性:关注:监控、故障修复、线上运维便利性、问题发现及时性。

二、架构演进
1、常见架构模式:单体架构,分层架构,面向服务架构SOA,微服务架构
SOA只是逻辑服务拆出,再通过服务总线调用;微服务是接入、逻辑、数据访问全拆出来,彻底业务层面服务组件化。
2.4、微服务架构体系包括:微服务架构、服务网格架构、单元化架构。
2.1、微服务架构核心组件:调用链、服务网关(用户鉴权、动态路由、灰度发布、A/B测试、负载限流等)、负载均衡、API管理、配置中心、分布式事务(TCC、高可用消息服务、最大努力通知)、服务治理(服务注册与发现、服务监控、服务流量管理、安全访问与授权认证)、支撑平台(因更碎片化,部署运维监控更复杂,需更多工作自动化)
2.4.1.1、优点:开发复杂度低、松耦合、跨语言、独立部署。
2.4.1.2、缺点:1、如果拆分不合理会导致修改复杂,调用链上下节点都要改;2、测试工作量增加。
2.4.2、服务网格架构。非侵入。重试、监控、追踪、熔断。关注服务间通信、监控等运维操作的解耦,和DevOps结合。开源软件有:Linkerd、Envoy、Istio、Conduit。
2.4.3、单元化架构。按照用户数据维度切分。实现单元化需满足:1、业务可切分;2、单元内业务是自包含;3、系统面向逻辑分区而非物理部署的。

蓝绿发布、灰度发布(用户很重要时)、滚动发布(k8s自带)
A/B测试

三、常见基础组件
服务分布式部署,需远程调用。服务包括逻辑服务及基础组件(数据缓存、数据存储)。不同服务间通过数据分发进行服务调用。
数据分发:数据中转、消息通知。
服务远程调用:新上线服务发现、故障服务下线处理和流量转移。
3.1 数据缓存
Redis和Memcache,前者支撑多数据类型、支持数据持久化、高可用架构、支持分布式分片集群、单线程读写性能极高、每个键1G数据量。
3.1.1 Redis高可用方案
主从复制。V2.8支持PSYNC
哨兵模式。自动故障迁移
3.1.2 Redis集群实现方案
核心是分片(sharding)。分片后:分割数据给多个实例存储,可扩展存储;利用对台计算机内存总和;多台计算机扩展计算能力;对台计算机和网络适配器扩展网络带宽
实现方案归纳为:客户端分片、基于代理分片、路由查询。
3.1.2.1 客户端分片:关键字分片(容易数据倾斜和热点数据处理)、取模分片(扩容时迁移成本高)、关键字哈希分片(虚拟节点解决一致性哈希倾斜)。客户端兼容性不好,如异构系统,so服务端分片更有优势。
3.1.2.2 基于代理分片:Twemproxy 和 Codis
3.1.2.3 路由查询:RedisV5.0自带,部署简单,自带节点扩容和Codis以及数据槽迁移工具。
3.1.3 Redis跨机房数据同步方案

3.3 数据存储
3.3.1 关系数据库 MySQL
通用和成熟的高可用方案:MHA。工作流程:宕机探测、日志复制、选主、日志补偿。问题:无法识别故障类型、连接压力大时误识别、和主服务器不通产生双主导致脑裂问题。针对办法:MySQL实例节点部署代理和探测服务、选择多节点分布式选举
3.3.2 列式储存数据库 HBsae

你可能感兴趣的:(系统架构)