服务端程序考虑的一些问题

主要从java的角度来讨论服务端程序设计常见的需要考的问题

1、对应的状态机,协议工程方面

首先服务端基本上是异步,如果一个请求由多个服务提供者提供,那么需要维护一个状态机,简单的可能是业务的ID,然后对应的一个是否完成服务的list,需要解决,服务完成后正常的从缓冲中清除,如果其中一个服务没有返回,那么在规定时间内必须返回异常。

如果你懂编译原理或者协议工程,那么在服务的稳定性和有雅性上可能会处理的更好。

2、服务隔离的处理,请求超时的处理,熔断的处理

服务提供方不可用的情况下,不会导致请求方得不到回应,而且在规定时间内必须有响应,还可以提供降级处理,比如:hystrix框架,简单见hystrix学习概要

3、限流的处理

a)队列的限流,一般使用jdk中的阻塞队列

b)信号量限流,一般使用jdk中的信号量

c)基于令牌和桶的限流,一般使用Guva的RateLimiter,或者使用redis来进行限制,如果使用nginx的话,nginx提供对应的功能

4、自动负载均衡的处理

服务负载均衡策略,一般会考虑轮询、最少连接、源地址保持等策略。如果多个线程从一个队列上获得数据,如何做负载均衡?简单的解决方案就是,通过阻塞读取队列上的数据,进行处理,每读取N个,加入到队列进行处理,休眠时间的长短上做文章。需要少量分流的策略,拿出数据后,休眠的时间长一点,从而拿到较少的数据进行处理。

5、服务监控的处理

监控平均响应时间,监控日志,监控jvm情况等,如果搭建完整的监控体系会很好,如果没有,写入到redis中也是不错的选择,将监控数据写入到数据库比较重。

6、线程模型

这部分主要可以参考面向模式的体系结构卷2:用于并发和网络化对象的模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小她爹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值