使用基于SpringMVC的透明RPC开发微服务

我司目前RPC框架是基于Java Rest的方式开发的,形式上可以参考SpringCloud Feign的实现。Rest风格随着微服务的架构兴起,Spring MVC几乎成为了Rest开发的规范,同时对于Spring的使用者门槛也比较低。

REST与RPC风格的开发方式

RPC框架采用类Feign方式的一个简单的实现例子如下:

@RpcClient(schemaId="hell......

对RPC框架的内存优化—改变服务引用方式

近来总是会有服务遇到OOM的情况,简单定位后发现rpc框架内存占用较多,看来是时候需要优化一波了。

占用内存膨胀

首先我们需要简单了解一下目前rpc框架的层次结构。

bitc

先从服务注册中心zookeeper的数据结构看,一个命......

在Kubernetes中优雅下线微服务应用

在去年写过一篇关于微服务优雅上下线的文章,比较笼统的将了一下微服务保证优雅上下线的一些方式。但随着应用的逐渐k8s化,原有的微服务下线会存在一些问题。

下线信号钩子

之前针对优雅下线使用的还是通过信号响应的方式。一个是docker以及k8s中下线信号SIGTERM,由于这个信号会被JVM处理,所以我们写了一份下线逻辑在其shutdownHook里。另一个是我们自定义的信号SIGUSR2,这个......

当我们谈微服务,我们在谈什么(3)— 如何保障微服务的稳定性

当一个单体应用改造成多个微服务之后,在请求调用过程中往往会出现更多的问题,通信过程中的每一个环节都可能出现问题。而在出现问题之后,如果不加处理,还会出现链式反应导致服务雪崩。服务治理功能就是用来处理此类问题的。我们将从微服务的三个角色:注册中心、服务消费者以及服务提供者一一说起。

注册中心如何保障稳定性

注册中心主要是负责节点状态的维护,以及相应的变更探测与通知操作。一方面,注册中心自身的稳......

当我们谈微服务,我们在谈什么(2)—一次具体的微服务请求背后

在我们对微服务架构有了整体的认识,并且具备了服务化的前提后,一个完整的微服务请求需要涉及到哪些内容呢?这其中包括了微服务框架所具备的三个基本功能:

服务的发布与引用

服务的注册与发现

服务的远程通信

服务的发布与引用

首先我们面临的第一个问题是,如何发布服务和引用服务。具体一点就是,这个服务的接口名是啥,有哪些参数,返回值是什么类型等等,通常也就是接口描述信息。

常见的发......