一个好的架构必须满足两方面挑战:业务复杂性和技术复杂性。
- 业务架构
- 应用架构
- 技术架构
业务架构就是讲清楚核心业务的处理过程,定义各个业务模块的相互关系,它从概念层面帮助我们理解系统面临哪些问题以及如何处理;而应用架构就是讲清楚系统内部是怎么组织的,有哪些应用,相互间是怎么调用的,它从逻辑层面帮助我们理解系统内部是如何分工与协作的。
技术架构就是讲清楚系统由哪些硬件、操作系统和中间件组成,它们是如何和我们开发的应用一起配合,应对各种异常情况,保持系统的稳定可用。所以,技术架构从物理层面帮助我们理解系统是如何构造的,以及如何解决稳定性的问题。
什么是架构师
- 沟通家里
- 抽象思维
- 多领域知识
- 技术前沿性
- 平衡取舍
产品经理的职责
就是:告诉用户,系统长什么样子;告诉开发,他要实现什么功能。
业务架构师的职责
架构的目标
- 业务的可扩展性
- 业务的可复用性
如何实现业务的可扩展性
系统的构成: 模块 + 关系
- 模块
从业务的角度看,每个模块都代表了某个业务概念,或者说业务领域
模块内部由数据和业务逻辑组成,其中数据是核心,业务逻辑围绕着数据,对数据做进一步加工,方便外部使用。
-
依赖关系 依赖关系实 质上体现的是模块的组织结构。
-
MVC 架构
- 表示层 对应的前端模块
- 应用层 对应和前端表示层直接关联的服务端
- 聚合服务层
- 基础服务层
架构的转变
- 单体架构
- 分布式架构
- SOA架构 面向服务的架构
- 微服务架构
系统故障
- 资源不可以
- 资源不足
- 节点功能异常
如何避免故障
- 冗余无单点
- 水平扩展
- 柔性事务
- 系统可降级性 (限流,降级,熔断,功能禁用)
- 系统可监控
日活百万系统如何架构设计
前端改造
- web 端cdn优化
- nginx 负载均衡
- 通信线路备份 (前置代理机)
应用和服务的水平扩展
- 订单水平分库
- 异步化处理
- 主动通知 避免轮询
- 缓存的使用
- 一体化监控
如何做好系统监控
用户体验
指的是从前端用户的访问速度出发,来监测系统的可用性,包括页面能否打开、关键接口的响应时间等等,用户体验监控一般结合前端的埋点来实现。业务监控
从业务结果的角度来看,比如说订单数、交易金额等等,业务监控也是最直观的,我们知道,如果业务数据没问题,系统整体也就没有问题应用监控
指的是对自己开发的代码进行监控,比如接口在一段时间内的调用次数、响应时间、出错次数等等中间件监控
的是对标准中间件进行监控,它是第三方开发的代码,比如数据库、缓存、Tomcat 等等,这些组件对应的是系统的 PaaS 层基础平台监控
(操作系统/服务器/网络) 的是对系统底层资源进行监控,如操作系统、硬件设备等等,这个层次的监控对应的是系统的 IaaS 层
如何打造一体化的监控系统
- 节 点信息采集
- 接入监控系统
常用系统参数
如何分库分表
垂直分库
垂直分库就是数据库里的表太多,我们把它们分散到多个数据库水平分库
单个数据库存储不下,或者数据库的读写性能有压力。通过水平分库,我们把一张表拆成多张表,每张表存放部分记录,分别保存在不同的数据库里,水平分库需要对应用做比较大的改造。