公司是采用这种分布式系统的方式来构建公司的一个大规模系统的,那么这个时候会涉及到哪些技术问题?spring
你若是要让不一样的子系统或者服务之间互相通讯,首先必须有一套分布式服务框架。缓存
也就是各个服务能够互相感知到对方在哪里,能够发送请求过去,能够经过HTTP或者RPC的方式。数据结构
在这里,最多见的技术就是dubbo以及spring cloud,固然大厂通常都是本身有服务框架框架
一旦你的系统拆分为了多个子系统以后,那么一个贯穿全局的分布式事务应该怎么来实现?分布式
这个你须要了解TCC、最终一致性、2PC等分布式事务的实现方案和开源技术。日志
不一样的系统之间若是须要在全局加锁获取某个资源的锁定,此时应该怎么来作?中间件
毕竟你们不是在一个JVM里了,不可能用synchronized来在多个子系统之间实现锁吧,是否是?队列
若是你原来就是个单块系统,那么你实际上是能够在单个JVM里进行本地缓存就能够了,好比搞一个HashMap来缓存一些数据。进程
可是如今你有不少个子系统,他们若是要共享一个缓存,你应该怎么办?是否是须要引入Redis等缓存系统?事务
在单块系统内,就一个JVM进程内部,你能够用相似LinkedList之类的数据结构做为一个本地内存里的队列。
可是多个子系统之间要进行消息队列的传递呢?那是否是要引入相似RabbitMQ之类的分布式消息中间件?
若是在单块系统内,你能够好比在本地就基于Lucene来开发一个全文检索模块,可是若是是分布式系统下的不少子系统,你还能直接基于Lucene吗?
明显不行,你须要在系统里引入一个外部的分布式搜索系统,好比Elasticsearch。
好比说分布式配置中心、分布式日志中心、分布式监控告警中心、分布式会话,等等,都是分布式系统场景下你须要使用和了解的一些技术。
由于沿用单块系统时代的那些技术已经不行了,好比说你单块系统的时候,直接在本地用一个properties文件存放本身的配置便可,日志也写到本地便可。
系统一旦分布式了以后,通讯、缓存、消息、事务、锁、配置、日志、监控、会话,等等各类原来单块系统场景下很容易解决的问题,都会变得很复杂,须要引入大量外部的技术。