单体架构
单体架构的优点:
1、易于开发
2、易于部署
3、易于拓展
单体架构的缺点:
1、巨大的代码、代码质量下滑。两者恶性循环。
2、IDE过载。
3、Web容器启动效率。
4、持续部署带来挑战。
5、应用不易拓展。
6、规模化开发。
7、一套技术栈,撸到低。
在单体架构中,为了负载均衡,需要将1套代码部署在多台web服务器上。但是 如果在“用户系统”中用到了“项目系统”(就是部署在3台服务器上的系统)中db内的一些数据,那么该怎么去做?直接使用 link server去访问那个DB?
答:
1、聚合服务(聚合数据库:再创建一个数据库,将 这两块用到的表都放到一个DB当中,通过对聚合数据库进行查询)。
2、冗余(将用户数据冗余到项目系统中去,直接在项目系统的DB内查询出)。
对单体架构进行横向拓展。
将原本的单体架构拆分成多个服务部署在多个服务器上。
1、通过调用service,读写数据。
2、读写分离。(当第1条无法解决问题,就使用第2条)
3、分库。(当第2条无法解决问题,就使用第3条)
微服务
一组小的服务
独立的进程
轻量级通信
基于业务的能力
独立部署
无集中式的管理
微服务所带来的问题(挑战):
1、分布式所带来的问题追踪、测试、部署、监控。
2、开发难度加大(聚合查询、分布式事务)。
var userService=new UserService();
var user=userService.GetUser(10010);
在单体架构中,如果上面的代码发生异常,我们能够很块的定位到错位原因,但是在微服务架构中,由于是通过调用服务(服务器与另一台服务器通信)来获取数据,如果出现了错误,那么无法能够迅速的定位到错误问题。(可能是代码bug,可能是网络问题……)
面向微服务架构的单体架构。
在微服务架构下,聚合服务是使用 UserAPI和ContactAPI 来读写数据的。而在这里,作者是创建了AggregateController,并在该controller中引用了两个service来达到目的(引用DLL的方式)。