架构师训练营第四周总结:互联网架构概要
互联网系统遇到的问题:
高并发,大流量:要面对高并发的用户,大流量的访问
高可用:系统需要提供7*24小说不间断的服务
海量数据:需要存储,管理海量数据
用户分布广泛,网络情况复杂:用户可能分布在全球的各个地方,网络情况复杂千差万别
安全环境恶劣:由于互联网的开放性,使其更容易受到攻击,大型网站几乎每天都会遇到黑客的攻击
需求快速变更,发布频繁:互联网产品为了快速适应市场,满足用户需求,产品发布快。大型网站发布以周为单位,中小型网站一天可能发布几十次
渐进式发展:几乎所有的大型网站都是从小网站开始发展的。随着业务的快速发展,规模的变大。网站的架构也要随之进行不断的进行演化调整,以适应需求
为了应对互联网系统遇到的问题,互联网系统的架构设计要达到的目标:
高性能:一个打开缓慢的应用会导致严重的用户流失。任何架构设计必须考虑性能问题。影响用户请求的所有环节,都可用进行性能优化。
高可用:当服务器出现硬件故障时,服务依然可用。保证系统高可用的主要手段是冗余。任何一台服务器出现问题时都不会影响应用整体可用,也不会导致数据丢失。数据备份是保证服务高可用的一种常见手段。
可伸缩:是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器,新的服务器能否提供和原来服务器无差别的服务,集群的服务器的数量是否有限制。这些问题是衡量系统是否具备可伸缩性的标准。
可扩展:可扩展性关注的是系统功能性的需求。在增加新的功能时,是否能实现对原有功能透明无影响,不需要修改或者少量修改原来代码就能够添加新的代码实现功能。可以理解为设计原则中的开闭原则在架构中的应用。
安全:系统的安全架构可以保护系统不受恶意访问和攻击的影响,保护网站的重要数据不受窃取,针对现有和潜在的攻击窃密手段,有可靠的应对策略。
为了达到互联网架构设计的目标,架构模式采用的解决方案有:
分层:将系统在横向维度上切分成几个部分,每个部分负责单一职责,通过上层对下层的依赖和调用组成一个完整的系统
分割:在纵向方面对软件进行切分,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块。一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
分布式:分层和分割的一个主要目的就是为了切分后的模块便于分布式部署,即将不同的模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样的问题可以使用更多的计算机。
集群:多台服务器部署相同的应用构成一个集群,通过负载均衡设备共同对外提供服务。
缓存:缓存就是将数据放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段。缓存的种类有:CDN,反向代理,本地缓存,远程缓存。
异步:将一个业务操作分为多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
冗余:要想保证在服务器故障的情况下网站仍然可以继续服务,数据不丢失,就需要一定程度的服务器冗余运行,数据冗余备份。
自动话:在无人值守的情况下网站可以正常运行,出现常见问题时,可以自动处理。目前互联网的自动化架构设计主要集中在运维方面。serverless技术就是为了解决运维自动化的问题而产生的。
安全:对转账等重要操作进行风险控制;对网络通信进行加密;使用验证码,手机效验码进行身份认证;防止XSS攻击,SQL注入。随着业务技术的发展,业界在安全架构方面也积累了许多模式。
随着互联网的发展,互联网架构也在不断演化,可以分为这些阶段:
第0阶段:最简单的互联网应用架构。应用程序,文件和数据库都放在一台服务器上。
第1阶段:应用和数据分离。应用程序和文件,数据库分别放在不同的服务器上,应用程序远程调用文件和数据库。
第2阶段:使用缓存改善系统性能。应用程序通过调用本地缓存和远程分布式缓存来提高性能。
第3阶段:使用应用服务器集群改善系统的并发处理能力。通过负载均衡来调用应用服务器集群,提高服务的可用性和性能。
第4阶段:数据库读写分离。将数据库分为主数据库和从数据库,分开放在两台机器上。主数据库负责写操作,从数据库负责读操作。从数据库和主数据库之间通过主从复制进行同步。
第5阶段:使用反向代理和CDN加速网站响应。在负载均衡调度服务器之前增加CDN服务器和反向代理服务器,缓存图片等静态资源,提高网站访问速度,优化服务性能。
第6阶段:使用分布式文件系统和分布式数据库系统。将文件系统和数据库系统做成集群,提高文件和数据库的可用性。
第7阶段:使用NoSQL和搜索引擎。使用NoSQL和搜索引擎优化数据查询效率,提高性能。
第8阶段:业务拆分。在业务层面对架构进行重构解耦。
第9阶段:微服务和中台化。通过中台提供业务复用的能力,便于快速开发新业务。
第10阶段:大数据和人工智能。用大数据和人工智能提供或增强业务能力,典型的案例有今日头条的头条推送,淘宝的猜你喜欢等功能。
在进行架构升级时不一定要按照顺序来进行,可以根据实际情况进行组合运用。
应对高并发的两个技术方向:垂直伸缩和水平伸缩。
垂直伸缩:通过升级硬件和网络吞吐能力可以实现垂直伸缩。这种情况不需要改变应用架构,比较简单。但是有物理极限,到达某个程序时在进行垂直伸缩需要更多的花费。
水平伸缩:是指通过增加服务器提升计算能力的一类架构方法。水平伸缩总是可以增加更多的服务器。这样,就不会像垂直伸缩那样遇到单台服务器的极限。
水平伸缩优点更多,是解决伸缩性问题的圣杯。但是垂直伸缩在适当的场景下使用,也可以起到好的效果。
评论