微服务面试笔记(一)

一、什么是微服务?

微服务是SOA架构的一种变体,它提倡将单一的系统拆分成一组小服务,每个服务之间通过轻量级通信机制互相沟通。

相比于单体应用,微服务可以使得整个系统的耦合度降低,减少服务器资源浪费,提高系统的容错率,使得开发更加敏捷。

缺点:微服务相对于单体应用,系统的复杂度更高,对开发人员的技术要求也更高。

二、什么是服务降级?

服务降级就是去降低一个服务的能力等级,是提升系统稳定性和可用性的一种策略。当服务器压力增加的时候,根据实际业务的需求和流量情况,临时关闭一些非核心业务,释放服务器的资源,去保证核心业务的稳定运行。

服务降级有两种方式:

主动降级:

一般是人工预先有规划性的降级,比如说双十一的电商平台,核心业务是支付,所以为了保证双十一当天的支付系统的稳定性,就会把其他非核心业务的资源降低,例如把评论、退款等服务的资源降低。

被动降级:

有两种情况会触发被动降级,一种是熔断触发,另一种是限流触发。其实无论是限流还是熔断,最后都会把一个相对友好的结果返回给客户端,比如说“系统繁忙”之类的默认请求结果,这个结果就是一种降级策略。

三、如何把一个单体应用拆分成微服务?

1、保持高内聚低耦合、职责单一的原则,根据系统中的功能具体拆分,服务粒度要适中,不能太细,比如一个接口一个服务这样就是不对的;

2、根据业务模型切入,将一个或者几个功能合并成一个服务,比如订单、支付合并成一个订单支付服务;

3、演进式拆分,比如一开始像2中设计把订单和支付规划在一个服务内,但是由于后期订单和支付各自的功能越来越多,两个功能之间的耦合越来越大,这个时候就可以将订单、支付各自拆分成单独的服务。

全部评论

相关推荐

自从我室友在计算机导论课上听说了“刷 LeetCode 是进入大厂的敲门砖”,整个人就跟走火入魔了一样。他在宿舍门口贴了一张A4纸,上面写着:“正在 DP,请勿打扰,否则 Time Limit Exceeded。”日记本的扉页被他用黑色水笔加粗描了三遍:“Talk is cheap. Show me the code。”连宿舍聚餐,他都要给我们讲解:“今天的座位安排可以用回溯算法解决,但为了避免栈溢出,我建议用动态规划。来,这是状态转移方程:dp[i][j] 代表第 i 个人坐在第 j 个位置的最优解。”我让他去楼下取个快递,他不直接去,非要在门口踱步,嘴里念念有词:“这是一个图的遍历问题。从宿舍楼(root)到驿站(target node),我应该用 BFS 还是 DFS?嗯,求最短路径,还是广度优先好。”和同学约好出去开黑,他会提前发消息:“集合点 (x, y),我们俩的路径有 k 个交点,为了最小化时间复杂度,应该在 (x/2, y/2) 处汇合。”有一次另一个室友低血糖犯了,让他帮忙找颗糖,他居然冷静地分析道:“别急,这是一个查找问题。零食箱是无序数组,暴力查找是 O(n)。如果按甜度排序,我就可以用二分查找,时间复杂度降到 O(log n)。”他做卫生也要讲究算法效率:“拖地是典型的岛屿问题,要先把连通的污渍区块都清理掉。倒垃圾可以用双指针法,一个指针从左往右,一个从右往左,能最快匹配垃圾分类。”现在我们宿舍的画风已经完全变了,大家不聊游戏和妹子,对话都是这样的:“你 Two Sum 刷了几遍了?”“别提了,昨天遇到一道 Hard 题,我连暴力解都想不出来,最后只能看题解。你呢?”“我动态规划还不行,总是找不到最优子结构。今天那道接雨水给我整麻了。”……LeetCode 真的害了我室友!!!
老六f:编程嘉豪来了
AI时代还有必要刷lee...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务