怎样入门Java分布式应用?

网友解答: 我接触分布式系统有很长的时间了,也算小有心得,下面从what,why,who,when和how几方面来分别讨论!1,what:分布式是什么?相对于把所有服务,功能在一台机器(

网友解答:

我接触分布式系统有很长的时间了,也算小有心得,下面从what,why,who,when和how几方面来分别讨论!

1,what:分布式是什么?相对于把所有服务,功能在一台机器(或者一个集群)进行统一部署的集成系统,分布式采用了拆分的方式,将不同的服务部署在不同的节点上,彼此之间通过某种方式进行通信,对外表现出高度透明和内聚性,让使用者感觉到是一个统一的整体!

2,why:为什么要使用分布式?①集成系统代码耦合严重,难以扩展②而且随着业务需求越来越多,就算是使用集群也很难达到高并发,低延迟的要求③集成系统对于单个服务器的要求很高,很容易出现内存溢出,CPU占满的情况!使用分布式系统能将服务粒度变小,防止业务耦合,同时对于单个服务水平扩展更加容易!

3,who和when:什么场景该使用分布式呢?在单一系统无法满足性能需求的时候(阿里巴巴双十一几十亿的访问可不是盖的,是几万台服务器堆起来的),在业务耦合太严重的时候,都应该考虑将集成系统拆成分布式系统,通常来说所有公司都可以使用分布式系统,但是涉及到更多的开发资源,更多的运维成本,所以小公司可以选择使用!

4,how:怎么玩转分布式?先来看下JAVA中有哪些涉及分布式的技术,首先需要拆分服务,所以需要微服务架构(springcloud和dubbo),服务之间相互调用使用rpc或者服务注册与发现中心(eureka,zookeeper),如果服务异常了,需要进行熔断,防止雪崩(hystrix等),服务之间要通信,所以需要消息队列保证数据传输(redis,kafka,activemq等),数据库性能跟不上,需要进行分库分表(多台数据库分布在不同的服务器节点上),业务代码连接分库分表的数据库需要通过中间件服务(mycat,sharding-jdbc等),高并发,秒杀系统,数据库IO速度还是跟不上,就不得不引入缓存(redis,memcache等),数据库之间或者和缓存之间不可避免的需要进行数据同步(canal等),单个服务如果还有性能问题,可以使用反向代理和负载均衡(nginx等)!

总之,分布式技术不是简简单单的一门技术,而是涉及到服务的拆分,服务的通信,服务的相互调用等一系列的高难度问题!

同时,由于系统是分布的,对于分布式事务(使用TCC,多阶段提交等方式保证数据一致性),分布式缓存,分布式消息队列,分布式锁,数据一致性,消息丢失,全局唯一ID等问题都是迫切需要注意的难点!

具体的分布式实现不是三言两语就能说清的,一定要在实际的项目中多加实践,才能深切的掌握这项技术,更多在项目实操上遇到的问题,可以联系笔者进行研究讨论,更多技术分享,敬请关注。。。

网友解答:

Java分布式架构,主要从四个方面考虑:

一、分布式架构的原理

分布式架构的演化过程

如何把应用从单机扩展到分布式

CDN加速静态文件访问

系统监控、容灾、存储动态扩容

架构设计及业务驱动的划分

二、分布式架构的策略

分布式架构网络通信原理

通讯协议中的序列化和反序列化

基于框架的RPC、webservice等

Dubbo管理中心及监控平台的部署

基于Dubbo分布式系统架构的实战

Dubbo容错机制及高扩展性分析

三、分布式架构中间件

分布式消息通信Kafka/RabbitMQ/ActiveMQ

redis主从复制原理及无磁盘复制分析

MongoDB企业级集群解决方案

MongoDB数据分片、转存、恢复策略

Nginx反向代理、负载均衡

基于Netty实现Dubbo多协议通讯支持

Netty无锁化串行设计和高并发处理机制

四、分布式架构实战

分布式事务解决方案

分布式服务降级、限流

分布式架构下的分布式定时调度等

当然,除此之外患有很多技术有待我们研究学习,就不一一列举,上面提到的内容,也不是入门级别的,其中任何几项,只要学好了,你就是大牛,加油!!!
标签: