架构师训练营 - 作业 - 第四周
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述
分层
面临的问题:业务代码庞大复杂,代码之间耦合严重,修改扩展困难
解决方案:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
涉及的技术:设计模式,MVC 模式、DDD 设计、分层设计、六边形架构
分割
面临的问题:单体应用代码庞大复杂,业务升级、开发效率、部署频率、故障隔离变得低效和困难
解决方案:将系统在纵向维度上进行切分,将一个大系统拆分成一个一个的小系统
涉及的技术:应用层面有微服务、中台、服务间通信如 RPC 调用、服务发现、服务治理等
分布式
面临的问题:单机服务器性能受限,垂直伸缩有瓶颈(超过一定范围后,成本急剧上升)
解决方案:水平伸缩解决性能瓶颈,将系统拆分为多个模块和服务,并将模块和服务部署到不同的服务器上提供服务。
涉及的技术:
分布式应用和服务
分布式文件系统
分布式静态资源
分布式缓存
分布式数据和存储
分布式计算
集群
面临的问题:单个应用服务器性能受限,无法满足高可用用户场景
解决方案:将应用部署到集群,作为一个整体对外提供服务,提升系统并发能力及可靠性
涉及的技术:反向代理、负载均衡、DNS轮询、主从选举机制
缓存
面临的问题:频繁请求的资源,每次需要花费较多的时间读取
解决方案:对请求频繁且耗时的资源进行缓存
涉及的技术:CDN、反向代理、本地缓存、远程缓存
Radis
Memcache
异步
面临的问题:系统响应慢,用户体验差;系统耦合严重,彼此依赖
解决方案:将业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作
涉及的技术:消息队列、反应式编程框架
RabbitMQ
RocketMQ
Kafka
冗余
面临的问题:需要在服务器无法做到7x24小时不宕机的情况下,保持系统可以持续服务
解决方案:对系统和数据进行备份处理
涉及的技术:服务器冗余运行,数据冗余备份,
自动化
面临的问题:服务繁多,版本管理、发布复杂
解决方案:DevOps自动化运维
涉及的技术:
DevOps 持续集成/部署/发布/监控
Jenkins/K8s/Docker/Artifactory
灰度发布/金丝雀发布/蓝绿部署
安全
面临的问题:恶意访问和攻击,网站重要数据窃取
解决方案:对数据进行加密、校验码、过滤敏感和垃圾信息
涉及的技术:XSS 攻击、SQL 注入、渗透测试、防火墙
参考连接
https://xie.infoq.cn/article/2a79b5c737a72cc2f1e65f5aa
https://xie.infoq.cn/article/1b5a043bfc55ef2fb073b131f
评论