服务耗时优化的常见六种方法
在微服务架构下,针对有低延时要求的接口耗时优化问题,本文提出了六种常见的方法。
在微服务架构下,针对有低延时要求的接口耗时优化问题,本文提出了六种常见的方法。
“话说天下大势,分久必合,合久必分”。分与合是事物发展的一般规律。分带来的问题要用合的方法去解决,合带来的问题要用分的方法去解决。事物分与合的矛盾决定了它的发展。这是矛盾法则的基本原理。
MySQL数据库自带基于binlog的主从复制功能,在内网中实现数据备份、读写分离是比较容易的。但是,在跨机房环境下通过公网如此同步数据就会存在一些困难:
实现RabbitMQ的消费者有两种模式,推模式(Push)和拉模式(Pull)。
实现推模式推荐的方式是继承DefaultConsumer
基类,也可以使用Spring AMQP的SimpleMessageListenerContainer
。
推模式是最常用的,但是有些情况下推模式并不适用的,比如说:
使用Maven过程中,曾经出现过本地仓库中已经存在某jar包,但是Maven仍然从远程仓库下载jar包的现象,并且可能会报出类似以下的错误:
1 | [exec] [ERROR] The project com.acme:test:0.0.1-SNAPSHOT (/home/acme/pom.xml) has 1 error |
在生产实践中,配置覆盖是解决不同环境不同配置的常用方法。比如用生产服务器上的配置文件覆盖包内的文件,或者使用中心化的配置服务来覆盖默认的业务配置。
相比于profile机制(比如maven的profile、spring boot的profile-specific properties),即不同环境使用不同的配置文件,覆盖的方式更有优势。程序员在开发时不需要关心生产环境数据库的地址、账号等信息,一次构建即可在不同环境中运行,而profile机制需要将生产环境的配置写到项目资源文件中,而且要为不同环境使用不同的构建参数或者运行参数。
Spring提供了灵活的配置扩展能力,有多种方式将自定义的属性源,将集成进来,可以轻松地实现配置覆盖。
在Shell中$
是一个特殊的字符,在不同场景中有不同的用法。
使用Hessian作为RPC框架传输数据,发现消费者收到的BigDecimal字段为0,而实际提供者返回的值非0。
在消费者和提供者模块的src/main/resource/META-INF/hessian
下:
增加serializers
文件支持序列化
1 | java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer |
增加deserializers
文件支持反序列化
1 | java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer |