#10:所以,我们将各个业务模块拆分成单独的服务,提供 rpc 给聚合层来调用。ps,微博 rpc 框架,code name motan(魔毯),不久的将来就会跟大家分享,敬请关注我们的官方微博上的消息。系统架构演变成现在这个样子,解决了很多的问题,但也引入了一些其它的问题。引入了哪些问题,如何解决的,我们接下来看看代码吧。
#11:所以,我们将各个业务模块拆分成单独的服务,提供 rpc 给聚合层来调用。ps,微博 rpc 框架,code name motan(魔毯),不久的将来就会跟大家分享,敬请关注我们的官方微博上的消息。系统架构演变成现在这个样子,解决了很多的问题,但也引入了一些其它的问题。引入了哪些问题,如何解决的,我们接下来看看代码吧。
#12:系统越来越复杂之后,遇到的第一个大问题就是:无法精确的追踪用户请求经过的路径,以及路径上每个节点当时的状态和结果。这样就给调试和线上问题追查带来了很大的麻烦。微博采用的办法是:给每个请求带上一个 request id,并将这个 id 带到尽可能的底层,所有能获得这个 id 地方的 log 里,都会带上。request id 的传递,当前我们一共使用了3种办法:在 http 接口调用的时候,走 header(为什么不直接加到 get 参数里?因为url可能会重用);代码内部,尽量加到 param 里,不方便添加的地方,及异步调用,就写到 thread local 里。
#17:错误处理在大团队中也是一个非常头疼的问题:很难协调在每一个环节对于每一种错误都表现出相同的行为,特别是新人写代码,或在新添加的业务中,要么是表现的与原系统不一致,要么就干脆缺少细致的错误处理,只对外返回粗暴的“http 503 service unavailable”微博当前的做法是:预先在一个地方分配好所有的可能的错误码,并强制要求在所有的代码中使用这一份错误码
#30:重试还有一种方式,那就是同一个业务有多套资源提供服务,如果某一套资源出现失败的返回,则重试另一套资源。比如这段代码,展示的是平台大量使用的高可用的 mc 部署模式的读写。重试的好处是消除了偶发错误,但在异常的情况下,也可能加重系统的负担,成为压垮系统的最后一根稻草。所以在进行重试之前,我们需要仔细权衡一下:重试的条件,重试的次数,重试的时机,重试的超时设置等等。