架构师训练营 - 系统架构
系统架构设计
设计模式是针对项目编程设计
架构设计是针对系统运行设计
互联网系统面临的挑战
高并发:大流量需要面对高并发用户,大流量访问不能设计一个高并发的系统,高并发是特征可以设计一个高性能高可用的系统
高可用:系统7x24小时不间断服务。服务器可以停机,系统不可以停机。不管有什么问题,系统服务不能停,这是有挑战的。高可用的架构有它的一套解决方案。
海量数据:需要存储、管理海量的数据
用户分布复杂,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展:好的互联网产品都是逐步运营出来的,不是一开始就开发好的。对技术提出了挑战。要求足够的技术支撑大部分技术在十年前就成熟了,在网站渐进式的发展过程中,在挑战下不断发展起来的。
技术方向
高并发有两个技术方向,垂直伸缩(提高硬件性能)和水平伸缩(增加服务器数量),一般垂直伸缩比水平伸缩见效更快,有时候更值得考虑。
垂直伸缩
随着用户并发访问量的增加,通过提供性能更强大的硬件应对。
互联网是不能长期依赖于垂直伸缩的方案,其原因:成本较高,计算能力越高增加的成本会更多。垂直伸缩有物理极限。操作系统或应用程序自身制约着垂直伸缩的上限。
水平伸缩
通过增加服务器的数量,提升计算能力。成本不会随计算能力增高得越高而成本增加更多。也不会遇到单台服务器的极限。
架构演化
单体架构, 应用程序、文件存储、数据库都在一台服务器上
应用数据分离
使用缓存改善系统性能
使用应用服务器集群改善系统的并发处理能力
数据库读写分离,分摊读写压力,系统可用性增加
使用反向代理和CDN加速网站响应
使用分布式文件系统和分布式数据库服务器
使用NoSQL和搜索引擎
业务拆分
微服务及中台化
大数据与智能化
架构模式
模式的关键:可重复性,问题与场景的可重复性
分层:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
分割:纵向切分。将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。有助于软件的开发和维护,也便于分布式部署,提高网站的并发处理能力和功能扩展能力。
分布式:将不同模块部署在不同的服务器上,通过远程调用协同工作。
集群:多台服务器部署相同应用构成一个集群,通过负载均衡共同对外提供服务。
异步:将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。从而加快响应速度,削峰,提供系统可用性。
冗余:保证服务器在出现故障的时候可以继续服务,数据不会丢失,就需要一定程度的服务器冗余、数据冗余备份。
自动化:无人值守的情况下网站可以正常运行。目前主要集中在运维方面。(例如自动监控,自动启动)
安全:通过密码手机验证码进行身份认证;网络通讯加密、敏感信息加密,使用验证码验证非机器操作,对于XSS、SQL注入进行编码转换,对于垃圾信息、敏感信息过滤,交易信息的风控等。
核心要素
高性能:影响用户请求的所有环节都可以进行优化
高可用:当出现服务器宕机,服务或应用仍然可用。应用冗余,部署在多台服务器上构建集群。数据冗余,存储在多台服务器上互相备份。任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
可伸缩:不断向集群中加入服务器缓解不断上升的用户并发访问压力和不断增长的数据存储需求。可容易地向集群中添加新的服务器,并提供与原来的服务器无差别的服务。可容纳总的服务器数量无限制。
可扩展:系统增加新的业务产品时,对现有产品透明无影响,不需要任何改动或很少改动既有业务功能就可以上线新产品。少耦合。可通过事件驱动架构和分布式服务解决。
安全:针对现存和潜在的各种攻击与窃密手段 ,有可靠的应对策略。
作业
大型互联网应用系统
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
一个典型的大型互联网应用系统有前端架构、网关及应用层架构、服务层架构、存储层架构、后台架构、安全架构、数据采集与监控架构、数据中心机房架构等方面。
主要解决的问题,如高并发、大流量,高可用,海量数据,用户分布广泛、网络情况复杂,安全环境恶劣,需求快速变更、发布频繁等。
前端架构
APP及Web开发技术,目前主要的Web框架有vue、angular、react,APP有原生Android、iOS开发,使用的技术有java、kotlin、Objective-c、swift;有H5的Web开发;有Hybird混合开发,使用到的技术有uni-app,ionic+angular,react native等。
浏览器及HTTP优化技术。浏览器主要有google浏览器、firefox浏览器、IE浏览器等,可以使用浏览器的调试模式,进行页面和JS调度。HTTP优化技术包括有gzip压缩技术,缓存技术等。主要是为了提升网页的响应速度。
CDN技术。CDN为Content Delivery Network,即内容分发网络。做为静态页面的缓存技术,用户访问最近的CDN服务器的内容,可以避免去服务器中获取内容。
动静分离。将静态资源文件部署在专门的服务器中,与Web动态内容分离。可独立访问静态资源文件。
图片服务。将图片、视频等大文件独立部署,与其他内容分享,并可使用CDN技术和缓存技术。
反向代理。在应用服务器、文件服务器之前进行反向代理,提供页面缓存服务。
DNS。域名服务,解析域名到IP,可通过智能DNS实现DNS负载均衡,指向对应的服务器上。
网关及应用层架构
网关架构。例如spring-cloud-gateway。用于隔绝应用服务与外部请求的直接访问,可达到服务隔离。可进行限流,限定访问,日志记录等作用。
负载均衡。可对集群服务器进行负载均衡,分摊请求到不同的服务器上。可对web服务器、文件服务器、应用服务器进行负载均衡。
动态页面静态化。对于访问量特别大而更新不频繁的动态页面,可以将其静态化,生成静态页面。再利用静态页的优化手段加速用户访问,如反向代理、CDN、浏览器缓存等。
业务拆分。将业务拆分成规模较小的产品,独立开发、部署、维护。可降低系统耦合度,也便于数据库业务分库。
服务层架构
微服务架构。将应用拆解到不同的服务中,实现敏捷开发和部署。微服务的优点包括复杂度可控、独立按需扩展、技术选型灵活、容错、可用性高。同时也带来些缺点包括多服务运维难度大、系统部署依赖、服务间通信成本高、数据一致性不容易保障、系统集成测试难度高、性能控制难等。微服务用到很多技术,像spring cloud框架、docker、Apollo配置中心、zookeeper、Kubernetes等
分布式消息列表。实现业务和业务、业务和服务之间的异步消息发送及低耦合的业务关系。像Kafka、MQ等
分布式缓存。通过可伸缩的服务集群提供大规模热点数据的缓存服务。像memcached、Redis等
分布式一致性(锁)服务。解决分布式事务问题。
存储层架构
分布式文件。用于存储图片、网页、视频等文件。可以使用云存储,像七牛云、阿里云OSS等。也可以自己搭建DFS系统,像Hadoop
分布式关系数据库。根据业务配置将数据库访问路由到不同的物理数据库中,实现关系数据库的分布式访问。
NoSQL数据库。非关系型数据库,在内存管理、数据模型、集群分布式管理有很多优势。像HBase、MongoDB、Redis等
后台架构
大数据平台。基于大数据开发的平台,像Hadoop、Mapreduce、Spark、strorm等技术
搜索引擎。网站内部的搜索引擎,目前用的比较多的是elasticsearch
推荐引擎。为用户提供个性化推荐服务。
数据仓库。根据离线数据,提供数据分析与数据挖掘服务
运维与安全
数据采集与展示。包括浏览器/APP数据采集、服务器业务数据采集、服务器性能数据采集。
数据监控与报警。监控网站访问情况与系统运行情况,为网站运营决策和运维管理提供支持保障
攻击与防护。保护网站免遭攻击及敏感信息泄露
数据加密与解密。敏感信息加密传输与存储,保护网站和用户资产。Https加密,通过SSL证书进行加密等
评论