架构师训练营 -week4 命题作业
大型互联网系统要具备以下四个特点,这里我结合这些特征进行说明,一个大型互联网系统应该使用的技术方案和手段。
高并发、大流量
主要目标
对于高并发、大流量的应对,主要是为了提高系统性能,也就是能否让系统达到高性能的处理,比如能够承接并建立大量的连接,能够对连接请求以可接受的时间内响应,这是主要目标。
解决手段
对于查询类请求可以考虑使用Redis、Memcached或者Encache等缓存加速响应,避免请求直接打到数据库上。
如果不得不打到DB层,那么考虑对Sql语句进行优化,比如建立索引、拆分sql、分库分表、读写分离等。
更深层次的就是对mysql服务或者引擎进行系统层面的调优比如Buffer等参数的调整。
简单的系统当单机处理不过来的时候,考虑水平扩容,增加整理处理能力,做负载均衡如软负载LVS或者Nginx,硬负载如F5.
高访问量的页面考虑做成静态化,利用静态资源服务器如Nginx或者CDN加速响应。
考虑异步处理,比如使用MQ消息队列进行削峰,可用的消息队列有很多比如ActiveMQ、RabbitMQ、Kafka、RocketMQ等。
高可用HA
主要目标
高可用的目的就是当网络集群中某节点宕机(不可用)时,其他节点能起到故障转移的作用,内部故障对外部不可见或者将故障成本降低到可以接受的范围之内。目前常用的分布式中间件大多具备故HA的功能,对于不具备的我们也可以使用一些组件的组合搭配来达到HA的目的。
解决手段
最常见的就是负载均衡比如Nginx做反向代理后端多个比如Tomcat这样的web服务器起到屏蔽内部故障节点对外不可用的情况。
除了Nginx这样的7层负载均衡,还可以做如LVS这样的ip+端口的4层负载均衡,以浮动IP+keepalived机制解决故障转移问题,以达到HA的目标。
还有就是像很多中间件如ES、Kafka等通过冗余数据分散到各个集群节点的方式避免单点故障。
还有像ActiveMq+zookeeper这种组合做故障转移
另外对于数据库如mysql的MHA高可用方案,Redis的集群模式都有成熟的HA方案提供使用。
可伸缩性
主要目标
可伸缩性想要达到的目标是当服务处理能力达到瓶颈的时候可以通过垂直伸缩或者水平伸缩的方式解决问题,不影响系统正常使用。
解决手段
垂直伸缩
通过升级服务器的处理能力来应对 大流量,也就是更强大的服务器硬件升级,改用大型机。但是互联网公司一般都付不起这种昂贵的系统升级费用,动辄几十万上百万的花费。这种方式的好处就是不需要改变架构模型,但是垂直伸缩毕竟尤其物理极限比如内存条插槽满了,也就没办法再升级了,物理机器的升级总有其限度,最后还是应对不了更大的并发需求。
水平伸缩
水平伸缩就是在不增加服务器硬件的前提下通过增加服务器来提升计算能力,侧重于架构模型的设计。比如负载均衡机制,比如Kafka主题分区增加等等。
可扩展性
主要目标
可扩展性指的是功能性需求,主要就是应对业务层面的扩展、迭代、变更,需要做的就是编码层面的优化、重构、系统的拆分。
解决手段
对于架构层面比如进行系统的业务架构设计,划分系统边界,进行系统业务拆分,模块化抽取。
对于应用层面比如利用设计模式重新组织代码、利用DDD领域驱动设计思想进行编码实现以及随时重构。
安全性
当然还得考虑其他的点比如安全性这种非功能需求,对于安全性一般的手段如防火墙、https加密传输、黑白名单机制、接口签名校验、OAUTH2机制等手段解决。
版权声明: 本文为 InfoQ 作者【Jeff.Spring】的原创文章。
原文链接:【http://xie.infoq.cn/article/d13a2baf495bd9b66dcc76418】。文章转载请联系作者。
评论