大型网站系统的架构方向
团队内在做分享,总结了些架构方面的知识点,分享于此。互联网系统目前主要追逐的架构方向有以下5个方面:
高性能:天下武功,唯快不破
让干活的人牛一点
升级硬件设备
升级网络带宽
让干活的人多一点
多线程
分布式
让活少一点
在任何的技术层面上,无所不用其极的降低IO
从数量上减少:压缩算法,改变算法,少写大sql,索引,异步处理
让数据跑的更快:缓存,各种层面的缓存,浏览器的缓存、服务器的缓存、机械硬盘、固态硬盘等;不用关系型数据库,用nosql
高可用:不管你在不在,我一直都在
高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
MTTF (Mean Time To Failure,平均无故障时间),指系统无故障运行的平均时间,取所有从系统开始正常运行到发生故障之间的时间段的平均值。
我们的目标就是尽可能的增大MTTF的值
如何实现:
- 负载均衡
- 完善的监控
- 完善的发布策略(不停机部署)
- 主从结构
- 容错(健壮性)
- 隔离设计
- 熔断设计
- 重试设计
- ……
.
伸缩性:金箍棒,可大可小
互联互通,各种流量突如其来,如何应对
- 电商活动大促
- 微博热点,比如xx又离婚了
- 突如其来的ddos攻击
限流降级,加机器都是表面功夫,其实最关键是业务拆分
软件系统中最不缺少的就是拆
纵向切为数据层、应用层、表现层
横向切为产品子系统、订单子系统…
打个比喻,这有点类似于我们人体,而每个切分出来独立单元就是我们身上的每块肌肉,只有划分出肌肉,我们才能着重根据我们所要面临的外部情况,来决定着重锻炼我们的哪块肌肉
通常使用的技术就是
- rpc
- 服务治理
- 队列
- 负载均衡
扩展性:乐高积木
对现有系统影响最小的情况下,功能可以持续扩展及提升的能力,表现在系统基础设施稳定,不需要经常变动,应用之间较少依赖和耦合,对需求变更可以敏捷响应
可扩展架构主题思想是模块化,解耦*
注:伸缩性和扩展性是不同的问题,但是其实最终使用的技术其实是一样的,因为核心思想就是拆
互联网就是SOA、万般都是服务,我们的世界就是服务的串联,我们的未来就只有数据
安全性:安全生产、平安幸福
安全是系统的遮羞布,在懂行的人眼里,谁在裸奔一清二楚
总结
- 技术的世界不存在对错,只有优劣,而优劣的评价在于结果
- 每个人心里都期望有个银弹,但是现实就是没有银弹
- 唯一不变的就是变化