面试问题之如何解释微服务
这次的面试还是感觉非常愉快,没有那么憋屈,问的问题也非常有意思。
问题
假设现在有一个人完全不懂微服务,你能和对方解释下什么是微服务吗?
面试回答
这个问题如果要完全回答好,感觉不是那么容易。
什么是微服务
很多人都知道现代的开发流程多是前后端分离,后端采用部署服务的方式来提供服务。
这种服务是可以根据业务来进行区分,也可以是根据架构来进行区分。
微服务指的是一种应用架构,其中的一系列独立服务通过轻量级 API 来进行通信。
上面是对微服务的比较书面化的解释,我觉得不太生动。
我们可以从微服务的进程来进行一些说明
传统的服务器模式
如你对计算机网站比较熟悉的话,我们知道我们可以部署一个 Apache 的服务器,然后部署一个 MySQL 的数据库。
加上你有一点 PHP 的编程基础,你的个人博客网站就开张了。
在这个时候,你的所有服务都在你的 PHP 代码中,包括前端,后端数据库通信,数据返回处理,查询,对象化等等,全部都在一套代码中。
很好,你的程序运行也非常不错。
可能是因为你的内容太受欢迎了,本来每天只有 10 个人访问的你网站,慢慢的每天你的网站有成千上万的人访问了。
这个时候你的 Apache 服务器已经没有办法承受这么大的访问量了,每天宕机好几次,需要重启。
数据库也经常性的进行锁表等情况。
因为访问的人多了,一些用户对网站的界面提出了很多的意见。
同时,你还开始推送手机的 APP 了。
这么多的问题都慢慢的出现了,我们应该怎么办呢?
前后端分离
这个时候,我们可能首先想到是前后端分离。
让前端只处理界面和数据返回展示,前端可以通过调用后端的 API 来获得前端需要的数据;同时,手机 APP 也可以调用后端的 API 来获得程序。
这个时候,后端就被独立成为了一个服务,前端也是一个服务。
前端会使用前端的框架,后端会使用后端的框架分别来对数据进行处理。
API 返回问题
所有的数据请求假设我们都用在一个 API 上的话。
举例来说,用户邮件查重,在用户对我们网站进行注册之前,我们需要对用户的邮件地址进行查询,如果你只有 几万个用户,别那么费劲了,数据库查下就好了。
如果你有上千万的用户,每次用户的注册都要从上千万的数据库进行查找,同时你的这个 API 还要返回用户的信息,密码,校验,还需要提供内容查询服务等功能。
每次用户注册登录都这样就会累死了,那我们能不能这样,把用户的相关 API 请求单独做成一个服务,通过这个服务部署到服务器上,并且使用不同的数据结构来提高用户数据查询效率。
业务拆分
通过上面的解释,我们可以对系统中的业务进行一些拆分。
把本来是一个大系统应该做的东西,我们分成很多小的系统来做,每一个小的服务只完成特定的功能,比如说一个服务只提供用户处理,一个服务只提供查询,一个服务只提供消息。
这样我们就把一个很大的系统逐步拆分成了各种服务。
这种系统设计就是我们常说的微服务了。
结论
通过上面的解释,应该对一个完全不了解微服务的人有一个基本上的概念了。
当然,整个过程是比较复杂的,通常会涉及到各种技术栈,比如说大数据处理,数据缓存,集群部署等等。
但是这整个的思路和架构,就是微服务需要实现的。
另外一个好处就是当某一个服务出现故障的时候,我们可以很快的进行切换,而不会影响整个系统的运行。
如果你不懂计算机的话,通过上面的解释能够理解什么是微服务了吗?
欢迎大家在后面留言。