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