网站首页 > 文章精选 正文
上一篇,我对用户端进行了概要介绍,包括用户端设备类型和用户端应用形态,有兴趣的同学可以点击查看。
本篇将对服务端进行一个概要介绍,内容包括为什么需要服务端?用户端与服务端如何交互?服务端架构是怎样的?阅读完本篇之后,你或许能更深入的理解用户端与服务端的关系。关于服务端的更多细节,后续会通过连载的方式详细讲解。
为什么需要服务端?
一个手机App,在没有网络的情况下,仍然可以在手机上运行,并且可以使用部分功能,那是因为这些功能只使用了手机本地提供的能力。如果需要查看最新发布的新闻、购买一个商品、电影票选座等,就必须通过网络与服务端交互。
当然,有少量的App提供的所有功能都不需要联网,不需要与服务端交互,就可以正常使用,就像以前电脑上的单机游戏一样。这样的App并不在本系列文章的讨论范围。本系列文章要讨论的是购物App、社交App、视频App这些强依赖网络和服务端才能正常使用的App。
现在,我们知道了,一个手机App的所有能力,要么是手机本地提供的,要么是服务端提供的。作为移动互联网时代的App,必须有配套的服务端系统,才能正常使用,否则就是一个“单机游戏”,提供不了太多的功能。
如何与服务端交互?
当一个新闻App需要获取最新的新闻时,一般会使用HTTP协议,向服务端发起请求,服务端会根据请求信息找到对应的数据返回给用户端App。对于交互协议,现在更多的会使用HTTPS协议,以保证通信的安全性,特别是购物交易类的App。
由于移动端设备所处网络环境一直在变化,网络环境复杂,网络质量不稳定,为了给用户提供更好的体验,有些公司也会基于TCP自研应用层协议,或直接使用基于UDP的QUIC协议。
协议层面的优化虽然能够带来一些效果,但为了追求更好的体验,不少企业还会在用户端设备到服务端这段物理路径上做优化。这段物理路径,一方面因为物理距离较远,另一方面因为共享的公网,会导致网络质量较低。
关于物理距离较远的解决思路,就是将服务端的物理位置放置在距离用户更近的地方,这类解决方案最成熟的就是CDN(Content Delivery Network,内容分发网络)了。CDN可以将服务端的各类静态资源,如图片、JS、CSS等分发到全国各地,甚至全球各地的CDN节点上,当用户请求这些资源时,就可以从最近的一个CDN节点获取,大大提高响应速度。
关于公网质量较低的解决思路,就是将一段公网路径切换到高质量的专有线路上,这种解决方案较为成熟的就是DCDN(动态CDN)。使用DCDN后,用户端发出的请求,就近进入某个CDN节点,然后在CDN内部的高质量专有网络上找到最优的路径,将请求转发到服务端,响应数据仍然通过CDN专有网络返回。
上述关于物理距离较远的解决思路,解决的主要是静态资源的访问质量问题,对于动态资源请求也有类似思路的解决方案。动态请求之所以是动态请求,是因为响应请求需要在服务端做计算,这就需要执行服务端的代码,所以优化思路就是将这些代码部署在CDN边缘节点,直接对用户的动态请求进行响应,这就是当下热门的“边缘计算”。
用户端与服务端的交互模式和优化方法远不止上述描述的这些,我将在后续的文章中进一步讲解。
服务端架构是怎样的?
用户端是一个独立的应用,所有的功能都在一个进程内部运行(桌面客户端应用也有多进程架构)。而服务端是一个通过网络连接的分布式架构,服务端的能力被划分为多套系统,系统间通过网络协同,作为一个整体面向用户端提供服务。这套服务端的分布式架构,就是本系列文章的主要讲述的对象。接下来,我们先对这套分布式架构做一个粗粒度的划分,让你有一个整体的认识,后续文章我会详细介绍每个部分的细节。
我们可以将服务端架构分为以下4个部分:
- 接入层:用户端到运行业务服务的节点之间所有的组件服务,都可以划归到接入层。常见的接入层组件服务包括:DNS、GSLB、CDN、L4LB、L7LB、WAF、DDOS防护、边缘计算服务、全球就近接入网络、网络防火墙、双向通信服务(如MQTT、WebSocket等)、NAT网关等。
- 服务层:大型互联网平台的服务层,主要是微服务体系。常见的服务层组件包括:微服务网关、熔断限流平台、服务注册中心、服务配置中心、服务治理中心、服务间通信框架、分布式事务、分布式任务、服务网格等。
- PaaS层:基础平台即服务,各类中间件、数据库都可以划归到这个部分。常见的PaaS组件包括:消息中间件(如Kafka、RocketMQ、Pulsar等)、键值数据库(Redis以及Tair等KV存储服务)、传统单机关系型数据库(MySQL、MariaDB、PostgreSQL)、分布式关系型数据库(OceanBase、TiDB、cockroachDB等)等等。
- IaaS层:基础设施即服务,主要包括计算、存储、网络等基础服务。常见的IaaS组件包括:KVM、Xen、Containerd、Kata Container、Kubernetes、分布式块存储服务、分布式文件系统、对象存储系统,当然也包括物理服务器、网络设备等。
除了上诉的4个部分,还包括旁路的CI/CD系统、可观测系统、可靠性保障系统、安全系统、大数据平台、云原始体系、自动化系统等等。非旁路的部分还包括机器学习平台、多媒体服务等。这类系统中的一部分,我会在此头条号的其它合集中呈现,敬请期待。
总结
- 由于App的很多功能,都需要与服务端交互,所以基本每个App都需要一套对应的服务端系统。
- 用户端与服务端交互,一般会使用HTTP协议,为了提供更多的功能、更好的性能、更高的安全性,演进出了很多接入层技术。
- 服务端的架构可以划分为接入层、服务层、PaaS层和IaaS层4个部分,每个部分都有很多基础组件提供服务。
欢迎关注我的头条号@程序员地瓜,及时获取最新发布动态。阅读文章过程中有任何问题,欢迎在评论区留言,我会及时回复。
- 上一篇: 一款高度可定制化的数据可视化分析平台
- 下一篇: 警惕!HTTPS 证书可能会暴露你的 IP 地址
猜你喜欢
- 2025-04-28 一款高度可定制化的数据可视化分析平台
- 2025-04-28 数据库如何快速选型
- 2025-04-28 【SQL】SQL 语法差异大全(PgSQL/MySQL/Oracle/TiDB/OceanBase)
- 2025-04-28 OceanBase与TiDB、CRDB的区别(2):架构可靠性(下)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)