学习java之后,我也可以算全栈了(笑)。
java基于spring的各种东西都很方便,不像node的express需要自己找中间件。
这篇文章可能不会太长,主要讲分布式的理解。
假设一个基于spring cloud的应用,核心业务为serviceCore,包含serviceA和serviceB,其中A通过一个cloud服务访问。并且在执行完核心业务后记录日志
流程如下:
serviceCore->
cloudA.serviceA() // 这里会阻塞
serviceB() // 这里会自己执行事务
serviceLog->
cloudLog.serviceLog()
在这个过程中serviceCore无论使不使用分布式,其执行的时间是不会减少的,而且会增加数据传输的时间。
那么为什么要使用分布式?
如果用kotlin写服务端,使用协程模型(coroutine),使一个线程能多协程,协程可以并行阻塞,资源被释放后就可以增加吞吐量。
换句话说,高并发应用场景最核心在于迅速响应用户。
即使在集群的环境下,一组服务的吞吐量是有限的,当线程池资源枯竭的时候服务器就无法继续接收用户请求。
对于核心业务来说,将业务分成若干服务并交给rpc处理,主服务就能空出资源接收更多的用户请求,而核心业务又是调用服务,所有操作都在并行执行。
而非核心业务,可以用消息队列把它推送出去,这部分业务我们不需要返回值。
貌似对于单个用户来说,分布式并不能降低响应时间,但它确确实实能降低整个系统的响应时间。