架构师第 4 周

用户头像
上山砍柴
关注
发布于: 2020 年 06 月 26 日

1 一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。



提到互联网应用系统设计,需要应对的问题也就是三高问题:“高并发”“高性能”“高可用”,它们是互联网系统架构设计的主题。为了达到这些要求,针对不同的情况需要采用不同的技术手段。

1)查询量增加时,通过主从分离和一主多从部署抵抗增加的数据库流量的。是一种数据库横向扩展的方法;业界有很多的方案可以屏蔽主从分离之后数据库访问的细节,让开发人员像是访问单一数据库一样,包括有像 TDDL、Sharding-JDBC 这样的嵌入应用内部的方案,也有像 Mycat 这样的独立部署的代理方案。

2)系统正在持续不断地发展,数据库中存储的数据也越来越多,单个表的数据量超过了千万甚至到了亿级别,这时数据库的写入请求量大造成性能和可用性方面的问题,要解决这些问题,需要采取的措施就是对数据进行分片。这样可以很好地分摊数据库的读写压力,也可以突破单机的存储瓶颈,最常见的一种方式是对数据库做“分库分表”

3)数据库分成了主库和从库,数据也被切分到多个数据库节点上。但随着并发的增加,存储数据量的增多,数据库的磁盘 IO 逐渐成了系统的瓶颈,我们需要一种访问更快的组件来降低请求响应时间,提升整体系统性能。这时我们就会使用缓存

4)随着业务发展,你可能会遇到一些存在高并发写请求的场景,假设你的商城策划了一期秒杀活动,其中秒杀抢购就是最典型的场景。此时可采用消息队列来应对这种情况。消息队列主要作用就是异步处理、解耦合和削峰填谷,其中异步处理可以简化业务流程中的步骤,提升系统性能;削峰填谷可以削去到达秒杀系统的峰值流量,让业务逻辑的处理更加缓和;解耦合可以将秒杀系统和数据系统解耦开,这样两个系统的任何变更都不会影响到另一个系统。

4)伴随着业务发展,系统越来越复杂,若还是采用单体架构,存在着系统部署维护困难等问题,此时可以考虑采用微服务架构对业务系统进行改造。在这个过程中,需要考虑服务拆分时要遵循的原则,服务的边界如何确定,服务的粒度是怎样的。在服务化之后会遇到哪些问题如何来解决。

5)当系统被划分为多个服务之后,一个请求会涉及到多个子系统之间的调用,当有慢请求问题需要排查时,此时就需要分布式链路跟踪相关的技术。它能够帮助实现跨进程调用链展示、服务依赖分析,在性能优化和问题排查方面提供数据上的支持

6)系统在运营过程中,比如搞一些活动,运营活动冲量等,可能会有瞬时大量请求进入系统,此时微服务子系统之间是相互依赖的,可能存在由于依赖的资源或者服务不可用,最终导致整体服务宕机。举例来说,在你的电商系统中就可能由于数据库访问缓慢,导致整体服务不可用。还有就是对可能到来的流量没有正确的预估,当有超过系统承载能力的流量到来时,系统不堪重负,从而出现拒绝服务的情况。当出现这些情况时,就需要采用熔断降级,屏蔽非核心系统故障对系统的影响,保障系统核心功能可用。

7)当系统越来越复杂,再也不能进行手工的方式对系统进行监控与运维了,此时要考虑自动化运维与监控报警

8)一个互联网系统需要保障数据的安全,在应用系统的开发中,在提高系统性能,保障系统稳定的过程中,必须要采用数据安全机制技术

总结:互联网系统为了应对业务的发展,可以采用垂直扩展横向扩展的方法来提高系统的性能,满足业务的要求。垂直扩展就是提升服务器硬件,横向扩展就是采用技术手段改造系统本身。



用户头像

上山砍柴

关注

还未添加个人签名 2018.02.28 加入

还未添加个人简介

评论

发布
暂无评论
架构师第4周