架构训练营 -week4- 作业
问题:一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
大型互联网应用系统所要解决的问题
高并发,大流量
双十一
微博热点事件导致系统崩溃
高可用
7x24
海量数据
微博用户信息,微博的消息、评论等都是海量数据
搜索引擎爬下来的网页数据
用户分布广泛,网络情况复杂
可能需要为海外用户建立海外数据中心
安全环境恶劣
个人隐私数据泄露严重
用户防范意识普遍不高:多个网站使用同一个密码
黑客拖库,碰撞
部分程序员法制意识不高
需求快速变更,发布频繁
To C业务需求变化非常快,临时加需求,或是社会热点引发(如新冠导致猿辅导迅速扩张,多个app都开发了疫情相关页面)等
甲方对于需求阐述有时不够严谨,等做出来后又说不是他们想要的......
产品经理不够成熟,无法掌控产品的发展方向,被需求方牵着鼻子走,导致产品做出来功能很碎、没有系统
......
上述这些原因都引发各种需求变动。
渐进式发展
好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,有巨大背景的网站,后来发展都很惨淡。
解决上述问题的技术方案与手段
简要说的话,有如下解决方案:
分层
将软件在横向方面进行切分
示例:
系统分层,拆分为网关、反向代理、应用服务器、缓存服务器、数据库服务器等
分割
在纵向方面对软件进行切分
示例:
微服务,一个服务只负责一个业务模块
分布式
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
集群
这个不解释,太常见了……
缓存
CDN
反向代理
本地缓存
远程缓存
异步
示例:
Netty:通过NIO,以Future返回结果,异步处理
Kafka:内部采用异步、批量发送的方式提高吞吐量
各种MQ: Kafka, RocketMQ, RabbitMQ 削峰填谷
冗余
保证7x24正常运行
自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网的自动化架构设计主要集中在运维方面。
示例:
k8s可以设置pod数量,在某些pod失效、导致数量不足时,自动新建一个pod
安全
通过密码和手机校验码进行身份认证;
登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;
为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;
对于常见的用于攻击网站的XSS 攻击,SQL 注入,进行编码转换等相应处理;
对于垃圾信息、敏感信息进行过滤;
对转账交易等重要操作根据交易模式和交易信息进行风险控制。
解决上述问题的具体技术方案
上面这些是实现思想,落到具体工程上,又有下面思维导图中的各种技术:
版权声明: 本文为 InfoQ 作者【于成龙】的原创文章。
原文链接:【http://xie.infoq.cn/article/15d6827ccd58781726b4fd96f】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论