搭个微服务(一)微服务初探

本文介绍了作者在微服务架构实践中的经验,探讨了为何选择微服务,包括其优点如分布式部署、单一职责,以及缺点如复杂性和性能开销。文章分享了选用的技术栈,如Python3和Go,并提供了相关库的示例。此外,还强调了搭建微服务时应遵循的规则,如接口统一、服务间通信采用HTTP而非RPC,并提出了RESTful接口设计的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

好久没写博客了,最近主导了一个产品的后端设计。沉迷于微服务不可自拔呀(改BUG改的不可自拔:P)。准备写一个系列,用来记录这个产品从无到有的心路历程。也作为本菜鸟的一个笔记吧。
口水话不说了。进入正题。

为什么选择微服务

在《微服务架构》这本书中,作者已明确:微服务不是银弹。相反,它解决很多问题的同时,也会引入更多的问题。在近一年的实践中,微服务至少带来了这几个好处:

  1. 方便分布式部署,集中优势资源给重要的功能
  2. 解放思维,单一职责,方便开发和有序增加新功能
  3. 方便测试
  4. 对重要服务(比如微信转账)加以保护,更安全

微服务至少带来了以下几个坏处:
1. 更复杂的设计(容错,幂等)
2. 函数调用转为api调用的性能开销

一般来说,大型项目重构进行服务化是一个比较好的思路(比如后期把存储,消息等拆出来)。但是一开始就使用微服务的思想来设计项目,也不是什么问题,更早的享受它带来的优势岂不美哉。

选择的技术

本项目是一个新闻APP的后端,使用python3和go做为主打语言。这样能兼顾快速上线和性能。事实上,python3的性能并没有想象中那么差。6个进程handle近5000W/day的请求量轻轻松松。除了内存耗费多一点。
具体配置:
语言: python3,go
数据库:mysql
缓存:redis
使用python库:aiohttp,aioredis,aiomysql,sanic
使用go的库:github.com/go-sql-driver/mysql, github.com/gomodule/redigo/redis, github.com/gorilla/mux

sanic+aio库极大的提高了吞吐。不得不说是神器。喜欢python的同学一定要试试。

总则

要搭建微服务,一定要确立起规矩,否则必然陷入混乱。在搭建微服务的时候有几条简单的规则:
1. 同一张表,只能由一个微服务进行读写。其它服务必须通过该服务暴露的接口进行访问
2. 服务内部保持ACID,对外接口保证幂等
3. 所有服务采用同样的结构
4. 所有的服务都必须小到能在一周内重写

http还是rpc?

微服务间的相互调用,使用http还是RPC,这是个见仁见智的问题,在实践中,最后确定为服务间使用http调用,http相比rpc至少有以下几个好处:
1. 方便接口测试
2. 方便客户端和各服务间的相互兼容和对接(用过RPC的就知道,会被各协议版本和各种不同的通讯端搞蒙)
当然坏处只有一个:性能。但是很多情况下,性能的瓶颈不会因为没有用RPC。一切对非瓶颈的优化,都是幻觉。

要不要restful?

很多人觉得restful是一种比较落后的思想。但本项目的各接口最终采用的restful的设计。它至少有以下几个好处:
1. get,post,delete各司其职,同一个接口(资源)可以有多种功能
2. 以资源为视角,至少不用为接口想名字了。懒人必备。
3. 统一整洁就是美
在实践restful中,一定要转变思维,从资源出发。比如 /login 接口怎样变为restful接口?实质上,调用/login接口会改变并返回用户预留的token。所以这个接口的本质是 POST /user/token?pwd=xxx&id=xxx。

这些都是在实践中慢慢确立下来的一些经验,有了这些前题,就能开始撸起来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值