架构相关-长期记录

架构相关知识记录,遇到什么记什么

异地多活之多机房架构

为了保证关键业务系统的高可用,一般都要支持异地多活
  • 单机房的缺点
    • 服务不能保证高可能用
    • 用户响应延迟,有可能广州的用户访问确实北京的服务器
  • 多机房的好处
    • 服务高可用(数据容灾和业务容灾)
    • 提供系统访问速度,让服务离用户最近
  • 多机房的缺点

    • 如何保证数据一致性问题

          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