架构面试题 – 为什么我的朋友圈不见了?

标签: service | 发表时间:2014-12-25 15:03 | 作者:Tim
出处:http://timyang.net

经常有朋友问到,“感觉你们的系统最近没什么太大变化,你们几百号工程师在忙什么?”,下面的一个场景,是工程师花费了不少时间的场景之一,最坏的情况,选择的几种方案都走了一遍。

有如下一个场景,某个服务需要构建一个列表数据返回给调用方(调用方通常是客户端),服务本身是一个数据聚合器,它由内部多个远程服务的数据聚合而生成。在正常情况下,需要将所有内部服务的结果全获取成功后再返回。但是在一个大系统中,多个服务中某个服务出现不稳定的概率会比较大,当出现如图远程服务3不可用的时候,有三种不同的解决思路。

list1

  • 方案1:忽略出错的数据(图中数据3),直接返回数据1、2、4。
  • 方案2:遇到任意失败,整个请求返回错误503 service unavailable。
  • 方案3:忽略出错的数据(图中数据3),并告知调用方出错的范围,需要自定义的返回格式。如 {“load_data3_success”: false}

如果你作为一个架构师,会选择哪种方案?

方案一类似架构设计里面常说的优雅降级,在出现问题情况下,除了数据3不能返回之外,其它数据可以正常返回,原理上可以将损失降低到最低。但这种方案会给用户体验带来一定伤害,用户在使用系统时候会存在不确定性的心理感受。

方案二比较依赖调用方的容错逻辑,如果调用方保存了上一次缓存,且容错逻辑处理得当,用户表面会感受不到这个异常。如果没有容错逻辑,最坏情况则将会返回白页。但是即使有容错逻辑,由于正常的数据也不能及时返回,从工程师到用户可能不太容易接受这个结果。

方案三是一个看起来相对合理的方案,但是需要添加自定义的字段,本来这是一个标准的LIST返回,但是需要额外添加一些错误字段如 {“load_data3_success”: false}来标识哪些数据返回失败了。一个简单的接口变得异常繁琐,同时调用方也需要实现缓存及容错逻辑。这个方案从服务方到调用方的熵都增加了很多。

因此,这个选择题已经不好做了。但雪上加霜的是,在大部分应用中,对于数据列表访问同时还存在未读数的功能,如下图中的小红点数字。如果这个未读数由另外一个API提供(本讨论假设未读数API功能正常),情况就更复杂。

补充讨论一下,如果不提供单独的未读数API,客户端需要每次需要加载新的全量数据才能本地算出未读数,会带来访问速度的下降及客户端更多流量的消耗。因此大多数情况提供一个未读数API整体开销会更低。通过未读数API判断当服务端有新数据时候才去访问列表接口。

list2

这时候如果未读数都出来了,远程数据又取不到的情况下,你作为架构师,会选择何种方案?

如想及时阅读Tim Yang的文章,可通过页面右上方扫码订阅最新更新。

Similar Posts:

相关 [架构 面试 朋友] 推荐:

架构面试题 – 为什么我的朋友圈不见了?

- - Tim[后端技术]
经常有朋友问到,“感觉你们的系统最近没什么太大变化,你们几百号工程师在忙什么. ”,下面的一个场景,是工程师花费了不少时间的场景之一,最坏的情况,选择的几种方案都走了一遍. 有如下一个场景,某个服务需要构建一个列表数据返回给调用方(调用方通常是客户端),服务本身是一个数据聚合器,它由内部多个远程服务的数据聚合而生成.

[来自iPc.me] 18条有趣的微软面试题,自认IQ智商高的朋友来挑战一下吧!

- 刚子 - iPc.me
你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条. 如果只允许你两次把金条弄断,你如何给你的工人付费. [ 请大家更新订阅地址 http://feed.ipc.me ]. iPc.me 猜你可能还会喜欢:IE9正式版疑难解答与使用技巧分享. 成长中的80后们所面临的十大心理问题.

我的朋友

- bobo - 牛博国际
我的朋友张有一种怪病,便是他每每只能活一年. 他总是忙不迭地降生下来,匆匆地发育、成熟、学习、找马子、找工作,再匆匆地工作、结婚、生子、退休、苍老、死掉……所有一切总约摸一年完成. 而他的孩子,也总会继承这基因,卷入这轮回,即便每一代都有各自的名字,我也难以尽数,总之一概管他们叫“张”. 于是我们年都要去张的满月酒、去张的婚宴、去张的葬礼,每每也见到孩童的张放着好奇的眼睛向我请教、年少的张开了酒与我抱怨、年迈的张又饱受沧桑地向我宣导.

《朋友,你好》

- - 腾讯ISUX - 互联网用户体验设计
朋友网手机客户端下载页面设计分享. 先让我们来看看一些简单的数据:. ①    97%的中国城市已拥有手机,其中35%拥有智能手机;. ②    在电视与智能手机两者之间,50%的受访者表示宁愿放弃电视而非智能手机;. ③    中国城市智能手机用户随时随地都在使用智能手机,其中家里(66%),旅途中(59%),乘坐交通工具中(52%),餐厅(38%)及商场(30%)是使用智能手机最频繁的地方;.

避免面试尴尬,你需要了解的20个架构师相关缩写

- - IT瘾-geek
作为一个架构师,如果在面试的时候,面试官说出了一个英文缩写,这个时候如果你没有听过,是不是很尴尬?而且你也没办法针对这个问题进行描述回答!所以,多学习一些基础的英文缩写,一是面试可以游刃有余,二是可以装逼!下面的20个缩写,你都能讲清楚吗?. 控制反转( Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.

如果我有男朋友

- Being - 我们爱讲冷笑话
他要开通谷歌纵横,分享自己的地理位置,这样我就能随时都知道他在哪里. 他要开通淘宝支付和京东商城内容分享,这样我就知道他把钱花在哪里. 他要加我的人人,开心和QQ好友,这样我就知道他的人际圈有哪些人. 他要加我的Gtalk,这样他说自己关机睡觉了,我会发现他的状态还是idle. 他要加我的豆瓣,我就知道他看哪些书,喜欢哪些电影,喜欢怎样的姑娘,听怎样的音乐.

如何找到男朋友

- ixfx - 中国三明治

架构

- - IT瘾-dev
网关:Nginx、Kong、Zuul. 缓存:Redis、MemCached、OsCache、EhCache. 搜索:ElasticSearch、Solr. 熔断:Hystrix、resilience4j. 负载均衡:DNS、F5、LVS、Nginx、OpenResty、HAproxy. 注册中心:Eureka、Zookeeper、Redis、Etcd、Consul.

朋友其实就是那枚硬币

- sg - 咆哮女郎柏邦妮
最近两个很亲的人都出了状况,来询问我的意见,. 我老老实实的给了意见,结果她们都做了相反的决定. 我们抛硬币的时候,其实重要的不是到底是A面或者B面,. 重要的是,硬币掀开的一瞬间,我们心中会强烈的期待其中一个,. 有时朋友也是这样,我们不过是那枚硬币,. 我们做的也许不是给他们意见,顶多是促成一个决定,.

如何交到漂亮的女朋友

- 友书 - 译言-每日精品译文推荐
来源How To Avoid \'Just Being Friends\' With Beautiful Women. 告诉我你之前是否听过下面的话:. 你真酷,我喜欢你……但是不是那种喜欢. 你对我很重要……”——话说到这份上了,你估计是没戏了,放弃吧. 我真不想告诉你们,但是如果你听到这个了,游戏已经结束了……我知道好多男孩会继续发邮件给我,问我是否可以给他第二次机会.