写点什么

大型互联网系统技术总结

用户头像
dapaul
关注
发布于: 2020 年 07 月 02 日

一个典型的大型互联网应用系统会使用哪些技术方案和手段,用于解决什么问题?

常用的技术如下图:



前端

vue, react

工程化,组件化,加速开发。



微前端

微前端就是一种多个团队之间可以使用不同技术构建一个现代化 web 的技术手段以及方法策略。其中的关键字是多团队、采用不同的技术栈以及现代化的 web。微前端的思路继承自微服务的思想。



CDN

有效减少服务器负载压力,且提高用户访问速度。

网关

nginx, openresty

openresty是nginx的一个扩展版。网关一般用nginx或openresty。



envoy

envoy可以做反向代理和负载均衡,另外还支持异常检查、熔断、限速、统计、跟踪、流量管理等功能。

后端

swagger

如果使用restful接口做为后端服务接口,使用swagger,可以方面地展示及调试接口



Guava RateLimiter

Guava是google开源的Java功能库。RateLimiter是其中的服务限流功能模块,可以快速实现服务流程功能。



微服务架构

微服务架构比较适合敏捷开发,可以做到快速开发,快速迭代。同时,微服务的划分,可以对不同性质的服务做不同的部署策略,如并发高的服务,可以部署更多的实例,而并发不同的服务,可以部署少些实例。并且配合kubernetes,可以做动态的扩缩容,根据实际情况来决定部署的服务实例数量。

存储

数据库分库分表

支持高并发访问,支持海量数据快速访问。可以使用MyCat或ShardingSphere等中间件来做分库分表。

基础设施

Kubernetes

中大型企业中的应用一般都比较大,上百,成千上万,甚至更多。而这么多的服务,如何部署和治理,这是个问题。而kubernetes做为一个容器编排平台,可以有效解决服务的部署和管理的问题,并且可配置滚动更新,以及异常重启等策略,有效降低运维的复杂度,提高系统的可用性。



Istio

服务越多,服务的治理就越难,也越重要。像spring cloud, dubbo等框架都包含了服务治理相关功能,如服务发现、服务熔断、负载均衡等能力,但这些都是Java技术栈的,且一定程度上侵入业务。而服务网格而采用另一种解决方案,将服务治理下沉到基础设施层,也就是服务网络。这使得服务本身可以变得很薄,只包含业务逻辑本身,而服务发现、负载均衡、服务熔断、流量管理等功能都由网络来提供,另外,网格还可以提供错误注入、服务请求指标收集等。

基于网格的流量管理能力,还可以很方便地做灰度发布。



gitlab, jenkins, harbor

使作gitlab, jenkins, harbor等,可以解决服务的自动化编译及部署问题,做持续集成和持续部署,有效提高开发运维效率。

监控与告警

立体化监控体系

立体化监控体系主要包含指标监控、链路追踪,以及日志分析。

指标监控可以对服务异常信息、性能等数据进行收集及展示,并根据预定的规则进行告警,帮忙快速发现问题;对CPU,内存,流量等信息监控,还可以做异常预警,在问题出现之前就解决掉。

链路追踪,从服务请求的调用链路进行展示及分析,可以帮忙快速定位和分析问题;

对于一些业务逻辑异常、或错误信息,使用指标难以监控,这时可以通过分析日志发现及分析问题,同时也可以对日志分析中发现的问题做告警。



指标监控,比较成熟的方案是使用promethues收集指标, grafana做指标展示,使用alertManager或自行开发服务来做告警。



链路追踪可以使用skywalking, pinpoint等方案。



日志分析,常用的有ELK。

开发辅助

sonar代码扫描

通过代码扫描,可以找出不符合规范,复杂度较高,以及有替在风险的代码,辅助提高代码的健壮性,同时也使代码符合团队规范;



代码生成

使用代码生成工具,可以生成服务端代码框架,DAO代码,接口调用代码,极大简化开发工作,同时也减少手写代码出错的概率,加快开发效率。



自动化测试

可以使用jmeter或其他工具搭建自动化测试平台,暴露问题,从而提高系统稳定性。

用户头像

dapaul

关注

还未添加个人签名 2018.09.18 加入

还未添加个人简介

评论

发布
暂无评论
大型互联网系统技术总结