写点什么

2021 年五面蚂蚁,从单体到分布式,必须解决的四个问题

发布于: 2021 年 08 月 04 日

前言

微服务是近年来备受关注的话题,相比于传统的 SOA 而言,更容易理解,也更容易实践,它将“面向服务”的思想做得更加彻底。有人说它非常好,但就是“玩不起”,why?


微服务是一种分布式系统架构,它建议我们将业务切分为更加细粒度的服务,并使每个服务的责任单一且可独立部署,服务内部高内聚,隐含内部细节,服务之间低耦合,彼此相互隔离。此外,我们根据面向服务的业务领域来建模,对外提供统一的 API 接口。微服务的思想不只是停留在开发阶段,它贯穿于设计、开发、测试、部署、运维等软件生命周期阶段。


可见,我们提到的微服务,实际上是一种架构思想,我们不妨称它为“微服务架构”。今天就带着大家;来学习这份阿里技术专家手写的《微服务架构笔记》,让你成为一名优秀的微服务架构师。



二,本地缓存

如果使用本地缓存,当从单体迁移到集群后,就会面临缓存同步的问题,如下图。



最佳实践是上分布式缓存,既解决了缓存同步的问题,也释放了应用服务器的内存资源,如下图。


三,文件服务

应用服务器在上集群之前,文件通常会放在本地,或者单独的文件服务器上,因为文件服务需要占用大量的硬盘空间,以上两种方案都无法很好的解决硬盘扩容的问题,最佳实践是放到云存储上,比如阿里云的 OSS,或者腾讯云的 COS 上,这样可以做到按需扩容,如下图。


四,分布式环境下线程同步问题

在单机环境下,使用 lock 就可以解决线程同步的问题,一旦上了集群之后,lock 就不管用了,这时需要上分布式锁,分布式锁的解决方案也有很多,我这里推荐使用 redis 的 setnx,需要注意的是,如果 redis 是集群部署的,需要考虑这种情形:假设我们在 redis 的主节点上添加了一把分布式锁,不幸的是主节点挂掉了,而且主节点上的锁还没有同步到从节点上,如果此时有客户端来请求获得同一把锁,那么它将顺利地获得锁,之前那把锁会被无情地忽视掉,这就是分布式锁在 Redis 集群中遇到的麻烦。


为了解决这个问题,Redis 的作者提出了 Redlock 的算法来解决这个问题,推荐大家直接使用这个开源项目:https://github.com/samcook/RedLock.net

总结

机会是留给有准备的人,大家在求职之前应该要明确自己的态度,熟悉求职流程,做好充分的准备,把一些可预见的事情做好。


对于应届毕业生来说,校招更适合你们,因为绝大部分都不会有工作经验,企业也不会有工作经验的需求。同时,你也不需要伪造高大上的实战经验,以此让自己的简历能够脱颖而出,反倒会让面试官有所怀疑。


你在大学时期应该明确自己的发展方向,如果你在大一就确定你以后想成为 Java 工程师,那就不要花太多的时间去学习其他的技术语言,高数之类的,不如好好想着如何夯实 Java 基础。下图涵盖了应届生乃至转行过来的小白要学习的 Java 内容:


需要获取这份学习规划路线以及文章中提到的 Java 阿里内部 Java 应届生就业宝典的同学,请转发本文支持一下,关注我,点击此处免费获取




用户头像

还未添加个人签名 2021.07.29 加入

还未添加个人简介

评论

发布
暂无评论
2021年五面蚂蚁,从单体到分布式,必须解决的四个问题