
相对于传统的软件开发模式,微服务架构在很多方面都有明显的优势:
更松散的耦合
对于新需求的响应更容易
根据业务功能划分,使用独立的小模块来提供服务
每一个微服务模块都可以使用不同的技术来实现
但是,当从传统的开发模式转向微服务后,性能瓶颈依然是一个无法避免的共同挑战。
在这里,我总结出一些在微服务架构的性能优化建议,希望能对大家有所帮助:
减少单个微服务模块的内存占用:微服务模块的内存占用量和业务逻辑应该尽量划分的小一点,这样会更好的提升性能。
在设计微服务模块时,对性能和安全性进行考虑:在设计微服务模块时,除了对业务需求进行考虑外,也要在一开始就对性能和安全性进行分析。
对OAuth Tokens进行缓存:生成OAuth tokens对服务器开销很大,因此,OAuth tokens应该被缓存到接口服务器中,避免频繁的生成。
尽量使用非阻塞性的异步接口:异步请求是非阻塞性的,而同步请求在调用后,在结果返回之前,线程都是阻塞的,这会给业务系统带来非常严重的性能瓶颈,所以尽量多的使用异步接口来提供系统的并发性能。
缓存数据库查询结果:对于不是经常改变的数据,查询语句以及查询结果应该放到缓存中。这样可以有效的减少数据库查询次数,防止数据库过载。查询条件尽量创建索引。
使用数据库连接池:数据库连接池可以使同一个数据库连接重复使用多次,每次建立数据库链接花销也很大。
使用服务器端缓存:接口调用返回的结果最好也能缓存起来,可以根据参数作为索引来缓存对应的结果。比如,某一个接口返回商品详情数据,那么可以把查询到的商品数据根据id缓存起来,只要缓存中又对应商品的数据,就直接返回,不再查库。
使用搜索引擎(如Solr/Endeca):搜索引擎会优化并更快的返回结果,对于产品,价格等信息,最好使用搜索引擎建立索引并查询。
使用数据库集群:通过使用具有负载均衡功能的数据库集群,可以大大加快数据库查询速度。
减少后台进程:有一些特定的微服务模块可能只是用来做数据批量处理的。这些服务最好部署到单独的服务器,不要和业务模块共用服务器。
以上是我们使用微服务架构的一些经验,如果你也有使用心得,可以留言一起讨论哦。

