在分布式系统中对传统大型应用进行分层处理,而且保持层间的独立性,各层各司器职,展示层负责将用户界面呈现给最终用户,而中间件负责提供实际的业务功能和服务,数据提供数据库的服务以及其他等。在项目中开发到实施过程出现的一系列问题,才明白其实分布式系统的工作必须考虑一些问题:
(1)远程方法调用
开发者需要借助于网络连接各层,从而实现展示层到中间件层,中间件层到数据库层的连接,网络连接要负责分发方法的请求,代理(Brokering)参数,分发SQL语句等。
(2)负载均衡:
展示层客户应该连接到负荷最轻的那台中间件(也包括数据库)服务器,一旦服务器超负载运行,其他服务器应该能够替它分担负载。
(3)透明的容错:
如果服务器或者网络瘫痪,在不中断客户服务的前提下,能否将客户请求分发给其他的服务器?如果能,则响应时间多长?响应的时间是否能够满足业务的需求?
(4)后端集成:
开发者可能需要开发如下内容:
A。将业务数据持久化到数据库中
B。同现有的遗留系统的进行的集成
(5)事务:
一旦客户端同时访问同一行数据库记录时,该如何处理?如果数据库瘫痪,该如何处理?事务能够应对此类的问题。
(6)集群:
当某台服务器瘫痪时,其上的状态信息该怎么处理?需要在所有的服务器中提前复制这类的信息吗?而且,客户能否使用其他的服务?为解决这些问题就要使用到集群。
(7)动态重新部署:
如果网站处于运行状态,该如何实现软件的更新操作?难道需要暂时关机,还是让他一直处于运行中?动态,重新部署可以解决这些问题吗?
(8)完全关机:
如果需要关闭服务器,是否能够平滑的完成的系统的安全挂机(即不中断那些正使用当前服务器提供的服务的客户)?
(9)日志和评审:
一旦运行期系统出现错误,能否找到相关的 日志信息已解决问题?即使没有出现错误信息,日志信息有助于调试并发现问题的所在。
(10)系统管理:
一旦运行出现灾难性失败事件,谁在负责监控系统?需要借助于监控软件,让管理员预防灾难的发生,在出现异常事件时能够及时通知到管理员。
(11)线程:
如果存在多个客户连接到服务器,则服务器需要具备同时处理多个客户请求的能力,因此服务器必须具备多线程的能力。
(12)面向消息的中间件(MOM):
对于那些客户同服务器处于松耦合的场景,开发者需要借助于消息来处理客户请求,因此,此时需要借助于基础框架完成消息的处理。
(13)组件的生命周期:
服务器能够依据客户请求的数量的多少,而创建新的组件或者销毁现有的组件,防止内存服务重新启动时,内存泄露的问题。
(14)资源池:
如果某客户当前并没有使用服务器,则需要将其占有的服务器资源返还资源池,从而供其他客户使用,具体的资源有:对象,数据库连接,服务器中存活的组件等。
(15)安全性:
必须确保服务和数据库不会受到肇事者的破坏,因此,需要依据用户的响应的角色而授予适当的权限,即对器访问的操作授权。
(16)缓存:
假如存在在如下场景,所有客户需要访问共享的资源数据库中的一些数据。此时中间件服务器是否还需要根据每次的请求去数据库重复提取这样的数据?开发者应该清楚,将数据存放在内存中是较好的解决的办法,因为那样可以避免频繁的网络数据传输和访问数据库。
针对以上问题,我将在以后的博客中针对大家关心的问题一一描述问题的解决方案,希望各位大侠拍砖!!进行交流