架构相关知识记录,遇到什么记什么
异地多活之多机房架构
为了保证关键业务系统的高可用,一般都要支持异地多活
- 单机房的缺点
- 服务不能保证高可能用
- 用户响应延迟,有可能广州的用户访问确实北京的服务器
- 多机房的好处
- 服务高可用(数据容灾和业务容灾)
- 提供系统访问速度,让服务离用户最近
多机房的缺点
如何保证数据一致性问题
CAP理论,Consistency(一致性),Availability(可用性) Partion tolerance(分区容忍性) CAP三选二原则,CA适用于支付、交易、票务等强一致性的行业,宁愿业务不可用,也不能容忍脏数据
架构之荔枝荔枝FM
文章地址: 荔枝FM架构
幂等操作
分布式系统有三种状态,成功,失败和超时,超时会有两种情况请求丢了,服务端没有收到 和服务端收到请求,但是返回时候丢了。比如重复下单和重复支付问题 因此幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的
监控
系统资源(zabbix cpu/内存/磁盘/网络/文件描述/)top,iostat 进程监控 (错误日志/内存泄露/命令响应速度) 存储系统监控(网络测试/网络连通性) 实时报警(邮件/短信/微信) 报告(日报/峰值)
架构目标
支持快速扩容、自动化测试、接口api简单、与业务解耦 减少依赖,配置简单,约定大于配置
架构概念
内聚和耦合
内聚:是指模块内部之间的关系,例如功能内聚 就是指某个功能需要聚合在一起
耦合:是指模块与模块之间的复杂程度
我们在设计代码模块时候需要遵循高内聚低耦合这种设计思想
C4模型
c4模型使用4种不同的粒度来记录软件架构
https://insights.thoughtworks.cn/c4-model/
系统上下文图
这是最高粒度的图,没有什么细节,主要描述是应用程序的上下文
容器图
应用程序的容器,主要包括:应用程序、api、数据库等
组件图
组件图显示的是一个容器内的组件,比如有哪些模块
代码图
最细粒度的图,旨在描述组件内部的代码结构。对于这个级别,我们使用具有类级别人工制品的UML图
BFF(Backend for Frontend)和网关Gateway
https://www.cnblogs.com/dadadechengzi/p/9373069.html
bff俗称为为前端而开发的后端,为什么需要有bff这一层?
app -> 服务A
服务B
app -> bff -->服务A
-->服务B
如果没有bff层
1、app和后端服务耦合,任何一边的变化都可能对另外一边造成影响
2、app要考虑对后端服务对选址问题
3、app端需要做好多聚合裁剪和适配逻辑
BFF可以认为是一种适配服务,将后端的微服务进行适配(主要包括聚合裁剪和格式适配等逻辑),
向无线端设备暴露友好和统一的API,方便无线设备接入访问后端服务
为什么需要有网关gateWay
随着app业务扩展,单个bff肯定无法满足团队需求
app -> bff1 -->服务A
-> bff2 -->服务A
如果扩充成多个bff 可以解决这个问题,但是每个bff 都要做一些跨横切面逻辑,例如身份认证,限流,日志监控等,
每个bff都冗余同样逻辑的话,后期如果升级某个切面逻辑所有bff都需要变更,这是我们不希望看到的
所以引入gateWay
app -> gateway->bff1-->服务A
->bff2-->服务A
网关(一般由独立框架团队负责运维)专注跨横切面(Cross-Cutting Concerns)的功能,包括:
1、路由,将来自无线设备的请求路由到后端的某个微服务BFF集群。
2、认证,对涉及敏感数据的API访问进行集中认证鉴权。
3、监控,对API调用进行性能监控。
4、限流熔断,当出现流量洪峰,或者后端BFF/微服务出现延迟或故障,网关能够主动进行限流熔断,保护后端服务,并保持前端用户体验可以接受。
5、安全防爬,收集访问日志,通过后台分析出恶意行为,并阻断恶意请求。
中间件指标
nginx
单机nginx最高支持5万并发,所以百万并发的一般都要20台nginx做slb
创业公司架构选型
https://www.cnblogs.com/dadadechengzi/p/9478061.html
https://blog.csdn.net/j3T9Z7H/article/details/102791337