- 分层,这是在横向方向对系统进行切分
- 分层的挑战在于必须合理规划层次边界和接口
- 分层包括物理分层和逻辑分层两种。物理分层主要指的是 是否部署在同一个服务器上。
- 分割,这是在纵向方向对系统进行切分
- 将不同的功能和服务分割开来,包装秤高内聚低耦合的模块单元
- 分布式
- 分层和分割的目的在于小模块便于分布式部署
- 带来的问题:
- 1) 分布式意味着服务调用必须通过网络,需要考虑带宽的影响;
- 2) 服务器越多,宕机的概率越大
- 3)数据在分布式环境中保持数据一致性也是很难得 分布式事务也是很难得。
- 常用的分布式方案:
个人理解是:分布式是一个硬件或者软件组件分布在不同网络计算机上,彼此之间仅仅通过消息传递来进行通信和协调的系统。但是对同个功能服务 我们可以使用集群形式,然后通过负载均衡设备调控共同向外提供服务。
- 1) 分布式应用和服务;
- 2) 分布式静态资源;
- 3) 分布式数据和存储;
- 4) 分布式计算;移动的是计算而不是数据,将计算程序分发到数据所在的位置以加速计算和分布式计算。
- 5) 分布式配置、分布式锁、分布式文件系统。。。
- 集群,即多台服务器部署相同的应用,从而构成一个集群,通过负载均衡设备共同对外提供服务
- 即使访问量很小的分布式应用和服务,也至少要部署到两台服务器来构成一个小集群,这样可以提高系统的可用性
- 缓存,即将数据放在距离计算最近的位置以加快处理速度
- CDN:部署在距离终端用户最近的网络服务商,在这里先缓存一些静态资源。
- 反向代理:属于前端框架一部分,部署在网站前端,用户请求到达网络中心时,最先访问的是反向代理服务器,缓存静态资源,无需请求继续转发到应用服务器。
- 本地缓存
- 分布式缓存:将数据存储到分布式缓存集群中,应用程序通过网络通信访问缓存数据。
- 异步,业务之间的消息传递不是同步调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方法异步进行协作
- 通常需要使用消息队列(分布式消息队列 内存队列的分布式部署)
- 带来的好处:
- 1) 提高系统可用性;
- 2) 加快网站响应速度;响应延迟减少:A结果不需要等B使用。
- 3) 消除并发访问高峰
- 冗余:将宕机上的服务和数据访问转移到另一个机器上。
- 集群带来的必然结果
- 安全需求的必然结果
- 自动化,DevOps思维,尽量减少人工干预
- 自动化发布
- 自动化代码管理
- 自动化测试
- 自动化安全监测
- 自动化部署
- 自动化监控
- 自动化报警
- 自动化失效转移、恢复
- 自动化分配资源
- ......
- 安全:XSS攻击,SQL注入。