架构师训练营 - 作业 -4- 互联网产品问题与架构方案
互联网产品面向c端用户,产品定位决定后续的问题,进而架构上采用相应方案应对
1:互联网产品问题
互联网产品面向c端用户,主要包括以下问题。
1:需求快速迭代,频繁发布新版本-快速扩展性要求
互联网产品终身都伴随的问题,起步阶段更明显。
2:用户范围广,网络环境复杂-可用易用要求
因此一般都要求使用简单,体验好,这是产品层面。
网络可用性要求较高 。
3:安全问题突出-安全性
面对的所有人不受限,且在互联网环境。可能有来自各个方面的攻击,信息泄漏等安全风险。
4:高可用性
用户需24小时使用
5:快速发展-成长的烦恼--易扩展,弹性伸缩要求
使用量可能会快速增长,包括访问量,用户,数据等。
对企业是好事,对技术也是挑战,如果观察到占了风口要做好快速增长压力的适应方案
6:高并发,海量数据--高性能要求
高速成长后的企业,大型互联网产品要面对的问题
2:互联网架构问题的应对方案
总体上从高性能,高可用,弹性伸缩,易扩展,高安全性主要方面去解决问题
随互联网产品面对用户越多,功能越多,数据量越多 出现的各种压力,产品架构在高性能,高可用,弹性伸缩,易扩展,高安全性等主要方面去不断完善升级。
遇到问题-寻求解决方案->实现技术支撑方案。问题与方案技术间不是一对多而是多对多。方案可能从某一个方面,也可能是从计算,数据,运维,团队,网络多个层方面考虑。
以下说明是罗列式的,但实际是综合式的
2.1 快速迭代
快速开发:
一方面要求程序耦合度低,可快速扩展功能。
另一方面要求有可重用的组件,服务,方便组装出新功能。
具体:
成熟的开发框架:比如java 的spring系列,orm框架等
成熟组件库:自己的技术中台,开源的成熟中间件,rpc方案,网络库,前端库等
可重用的基础服务:微服务,业务中台
快速部署:
自动化运维部署,虚拟化,容器化
采用云服务从基础设施中解脱
2.2 网络环境复杂
多网络接入,针对国内几大运营商网络现状。
多地,多国部署(前期不用考虑)
2.3 高可用
服务器故障不可避免,高可用本质就是冗余,多个角度冗余+故障自动转移。
多地机房+DNS:防灾,防挖掘机
服务器集群+负载均衡+反向代理(包括反向代理,负载均衡本身的高可用方案)
服务拆分:服务拆分后的隔离,某个服务故障不影响其他服务,本身也是高可用的一种
服务治理:熔断,限流等--减少影响范围。
数据库高可用方案,分布式数据库
分布式文件系统:也有文件备份的作用,防止单机故障
灰度发布:发布时先小部分切,正常后在逐步全切。
系统监控报警:提前发现问题,发现问题及时告警。
自动化运维:自动扩容,自动重启
2.4 安全
安全也是多角度的,成长后安全问题会更重要,基本的安全防护是底线要求。没有安全可能一起重大事故就要了命。
服务器安全:操作系统安全加固,堡垒机
网络安全:防火墙,
安全存储:敏感信息加密存储
安全传输:https,tls,国密等
应用安全:网关,对特殊权限的审计,异常信息检查(风险控制),编码转换防sql注入,xss攻击,前端安全:脚本注入,app本身数据存储加密,各种身份多重认证(如短信,生物识别,口令要求复杂,重要口令要求定时更换),Oauth2.0,登录动态验证码
特殊应用防止信息抓取:如视频网站数据加密防止抓取,图片防盗链。
2.5 快速发展
包括业务上的快速发展,规模上的快速增加
业务快速发展提前预测并调整系统架构适应扩展,方法主要是解耦,服务拆分。拆分后服务修改测试上线更快,从团队上也可以安排更多人协作研发。
规模扩展的应对主要是分布式,系统弹性扩容。
服务拆分也更容易做针对性的扩容。
具体:
--服务化改造,微服务,中台,敏捷团队,云技术,云架构。
--初期高速成长不要忘记垂直扩展,买更好硬件,软件。
2.6 高并发,海量数据
1>高并发的初期垂直扩展
更好的服务器-cpu,硬盘,网络,采购CND,云服务器。但有极限。而且达到后期成本不划算。
2>水平扩展
水平扩展主要方案就是分布式与集群+负载均衡。
无状态的网关层,服务层比较容易拆分。有状态的数据层拆分比较复杂,目前有各种相对成熟的分布式存储方面。
数据库:从数据库分库读写分离,到分库分表,再到分布式数据库
文件存储:分布式文件存储,分布式对象存储
针对海量数据除了存储还有计算要求,海量数据的计算采用分布式计算。mapreduce,storm,flink等技术
评论