关于后端系统架构的思考随笔

关于后端系统架构的思考随笔

// 前端 - > 服务端(网关、具体服务) -> 数据层

个人看了一些书,写了一些代码,也做了一些架构工作。

系统架构可以通过业务非业务两个方面来结合起来考虑。

业务方面:

1. 系统具体提供什么服务

  • 具体做哪些业务
  • 如何提供服务

2. 业务模块划分

  • 处理模块与模块之间的依赖:树性结构、网状结构
  • 每个模块是否做到了高内聚、低耦合

3. 外部入口(API或页面)是如何设计的

  • 调用是否方便
  • 业务流程是否流畅

4. 业务可扩展性

  • 能否快速响应新增业务需求,尽量对可能变动的数据做成
  • 良好的业务抽象

非业务方面:

1. 可用性:

1.1 服务可用性

  • 防单点:核心服务必须多机房部署,每个机房至少保证有2台服务。多个机房的多台机器同时挂掉可能性太小了。
  • 系统监控:又分为业务监控和服务器性能监控。业务监控主要是监控服务的TP99、可用率、调用量等;服务器性能监控主要是对服务器心跳、CPU、内存、磁盘、网络做监控,比如CPU利用率,内存利用率及是否吃SWAP,磁盘IO和剩余空间,网络丢包、连接数、重传比率等。当发现问题,还有报警。
  • 服务治理:
  • 服务熔断降级:Netflix的hystrix是一个可以参考的实现,但是基于命令模式对业务代码的入侵性比较强,所以根据具体业务特点,自己实现一些开关也是能满足需求的。
  • 过载保护:类似于信号量的,控制能同时提供服务的并行规模。限速器也能实现此功能。

1.2 数据可用性

  • CAP原理
    • C:ZK、ETCD、CONSULE
    • A:多副本:一主多从架构
    • P:多机房,根据域名访问,失效漂移
  • 灾备
    • 数据离线备份、数据多写

1.3 工程质量:

  • 代码Review
  • 严谨的发包流程
    • 代码合并
    • 正式版本和快照版本的区分
    • 灰度发布
  • 测试质量
    • 单元测试
    • 自动化测试

2. 安全性

2.1 漏洞性质:

  • SQL 注入
  • Cookie伪造
  • XSS跨站
  • CC攻击
  • DDOS攻击

2.2 系统权限设计

  • 业务数据权限控制

2.3 数据加密

  • 对称加密
  • 非对称加密(加盐)

3. 性能

3.1 集群负载均衡

  • Nginx反向代理
  • DNS轮询
  • RPC服务轮询

3.2 MQ

  • 解耦
  • 异步
  • 削峰

3.3 缓存

  • 堆内缓存
  • 堆外缓存
  • 一致性哈希缓存
  • 分布式主从架构缓存

3.4 代码优化

  • 并发
  • 算法优化

3.5 吞吐性能

  • 大文件分割存储

3.6 JVM层面

  • GC

3.7 数据库层面

  • 索引
  • 分库分表

4. 水平伸缩性

4.1 服务器无状态

4.2 容器自动缩容扩容

posted @ 2018-04-11 04:42  土豆条  阅读(249)  评论(0编辑  收藏  举报