1.4.1 C/S架构模型概念
要讲客户端,离不开C/S架构模型
C-Client-客户端
S-Server-服务器
客户端/服务器模型,简称C/S架构模型
1.4.2 客户端版的C/S架构模型分层
1.4.2.1 两层模型
在我接触到的一些客户端应用中,有相当一部分分为两层
客户端层和数据库层
1)优点
此种分层结构简单,易于理解,代码编写相对容易
2)缺点
a. 可扩展性差: 无法进行多客户端的调度管理等任务。同时也面临数据库连接数的限制以及异构数据库间的切换,数据库性能成为瓶颈。
b. 可维护性差: 若数据库地址发生变化,所有客户端配置都需要修改,这是一项庞大的任务。所有功能都汇聚在客户端,只要需求一变动就需要升级,而客户端散落在各个端系统中,端系统的环境复杂多变,不可控,升级非常复杂和困难,如果再遇到发布失败需要回滚,那就是地狱级别的升级模式了
c. 安全性差:没有任何安全保障,一旦中毒,后果不堪设想。即使是本地局域网与外网物理隔绝,那也存在着安全隐患。例如,我在一家企业中从事客户端开发,网络物理隔绝,在其他同事将带病毒的u盘拷贝了进来,造成了不小的安全问题。
d. 稳定性差:代码逻辑混合在一起,bug容易增多,且不好复现。
1.4.2.2 三层模型
基于两层模型的种种问题,我们提出了三层模型,这也是做客户端开发非常推荐的模型,即使现在的需求只需要两层,但我仍然推荐采用三层模型,这样会很方便的对产品能力进行扩展
1)优点
a. 易扩展: 可管理多个客户端的调度,当系统遇到瓶颈时也可以动态扩展或升级底层库,也可以设置主从数据库等,方便系统整体扩展。例如近年来很火的容器化,k8s,方便我们能够顺利的进行底层升级。
b. 易维护:我们可以开发统一的管理后台,当需要修改客户端的某些配置时,在服务器侧进行统一设置,然后自动同步到各个客户端,可制作统一的升级方案,对于公共部分的功能只需要升级服务器能力即可。
c. 安全性: 可设置统一的网关,安全设置,拦截、权限等这会使服务器不那么容易受攻击,保证服务器的健壮性。
d. 稳定性: 统一由专业人员维护,运行在确定的系统中,保持环境稳定,这会使我们的产品更加稳定。我们还可以加入健康检测,服务网格,缩小爆炸半径,提供便捷的隔离措施。
2) 缺点
代码复杂,需要较高的编码水平,且不易迁移
1.4.3 C/S三层架构的功能划分
关于在服务侧如何进行网关设置,路由转发,负载均衡,服务网格,持久化,服务分级等集群相关的内容这里就不讲述了,这并不是我们本系列的重点。
下面我仅对C/S功能划分上做一个简单的整理
相比较两层架构所有功能写在客户端,三层架构实际上是对产品功能进行了一次重新分类,那么体现在客户端上我们就有必要区分将哪些功能放到客户端,哪些功能放到服务端,所以我们得有一个判断准则,下面提供一些思考方向
1.4.3.1 放到服务端
1)公共功能: 服务端只有一套,那么我们可以选择将公共的功能放到服务端,那么当功能有变化时只需要升级服务端即可。但这并不是绝对的,当涉及到复杂计算而又给服务端造成巨大资源消耗的任务,我们可以选择将此一部分功能下放到客户端执行,所以这个度要实际问题实际分析。
2)频繁变动的功能:对于页面变化频繁的窗口,可考虑将此功能放到服务端,通过配置化的方式进行更新界面。原理可参考B/S架构或直接内嵌浏览器。
像wps中的稻壳首页,钉钉工作台等都是这样的模式
3)会受到本地安全服务限制的功能: 对于有些功能可能会受到本地防火墙,杀毒软件等限制,若能放到服务端,则可考虑放到服务端
1.4.3.2 放到客户端
1)个性化功能: 不同客户端需要展示不同的界面或功能,这需要放到客户端
2)复杂计算: 复杂计算,影响到服务器性能的可考虑放到客户端进行处理
3)预处理: 为提高性能,可将发给服务器的数据进行预处理;增加缓存等
4)和本地资源联系紧密的功能: 如需要和本地操作系统有关联的,需要获取位置等感知客户端变化、需要和硬件打交道的功能等
针对功能的划分还有很多方法,需要根据不同的产品、项目进行具体问题具体分析。
1.4.4 C/S和B/S比较
一说起C/S就不得不提B/S架构,其实从概念上讲B/S是C/S发展而来的,它本质上还是C/S。浏览器也是客户端,而浏览器实现了Html渲染,JS解释器,网络接口等通用功能,它使我们可以基于html+css+js开发出各种类别的应用
1)硬件依赖: C/S客户端会比较依赖硬件环境及操作系统,而B/S只需要可以运行浏览器即可,实际上是浏览器帮助我们处理了操作系统和硬件上的依赖
2)维护升级: C/S中每个客户端都需要维护和升级,而B/S只需要升级服务端即可。所以在客户端设计开发中,应尽可能多的把公共能力放到服务端。
3)处理性能: 一般C/S都是部署在局域网,私有化部署的,且使用的是性能更高的C++,所以在处理速度上一般会优于B/S
最后,无论是几层模型最适合的才是最好的,例如只需要做一个小巧的客户端,我们直接使用一层模型即可。
我的公众号会专门更新一些独家干货文章,您可千万不要错过哦
微信号:小豆君编程分享 (关注后,可加入小豆君交流群进行学习交流,也可以和小豆君一对一进行专业咨询哦)
头条号:小豆君编程分享