使用java如何打造分布式框架或系统,需要哪些知识?
感谢邀请。
分布式系统的架构与设计,可能要按实际项目升级的需要来演绎,需要:
有 SOA的思想, RESTful API得整个明白,且大量应用;
有 统一登录,身份认证与授权的想法, token的定义与失效机制,加解密的处理;
有 文件服务器,提供静态文件的读写服务 (包装成熟可靠的API),CDN的概念;
有 消息队列的想法,且适当应用,比 ActiveMQ,Kafka;
有 缓存管理的概念,且大量运用,比如 Memecache, Redis等;
有 web服务器集群,负载均衡的想法,会玩 Nginx,HAProxy 等;
有 数据库集群的概念,能玩 主从数据库复制,读写分离 等;
有高级网络编程的概念,同步异步的应用,多线程的处理,socket程序,非阻塞的IO处理;
对 https, tcp/ip,telnet有深入理解与应用;
有对系统的容错机制处理,能做预警处理;
能设计高可用 (冷热备份,异地多活 等)的系统;
有对当下流行的系统设计框架的理解与应用 等;
声明
搞分布式系统,时间成本 与 资源成本 得先考虑好;
如果用户量不足数百,点击率上不去,就安心先把系统功能做好才是真;
优秀的系统,都是一步步分阶段来演绎的。
(结束)
目前主流的java分布式架构构建方案:
1,基于spring cloud的微服务架构,以spring cloud gateway为群集网关,eureka进行服务治理,open feign进行服务分发和消费管理。
2,以docker进行服务打包,简化部署任务。
3,以kubernetes进行docker容器编排以及群集计算资源管理
4,Hadoop 进行分布式存储管理
5,redis作为缓存及运行时数据管理,群集计算模式中,你不能再在应用程序内部保存全局数据。
6,以rabbitmq作为应用间消息传递
以上是构建java分布式应用的电型开源方案,当然还有其它的商用或者开源方案,不过基于spring cloud项目构建分布式应用是最为简易高效低成本的方案。
Java分布式应用如何入门以及有哪些资料?
想要入门,当然是看相关书籍或视频进行学习,建议可以看看《分布式java应用:基础与实践》这本书。
这本书介绍分布式java应用涉及的知识点,是阿里人写的,作者结合自己在淘宝网的实际工作经验进行论述,有一定的参考价值。
为什么有人说java适合分布式计算环境?
Java为什么适合分布式计算?主要原因还是因为Java是平台无关的!
什么是分布式计算环境?
分布式计算英文全称为Distributed computing,主要研究的是分布式系统(Distributed system)如何计算的,分布式系统本质是一组电脑,通过网络相互连接传递信息,并且在通讯以后协调其行为从而形成一个系统,组件之间的交互是为了解决共同的业务。
分布式计算可以讲大量的计算数据进行分割,并且分割成很多个小块,本质上是有很多台计算机进行分别进行计算,最终将各自的结果统一上传而得到数据结论。
常见的分布式系统的例子比如面向服务的架构,多人大型的网络游戏,对等的网络应用等等,这很显然不可能由某一台计算机完成,超级计算机目前还停留在实验室阶段,即使交付使用,也将存在成本过高等众多原因,那么分布式计算就可以解决这些问题。
为什么Java适合分布式计算环境?
从逻辑上讲,分布式主要分为数据上分布以及操作上分布两大类。数据可以分布到网络上的不同的主机上,对于操作分布则是将计算分散在不同的主机上。
Java有url对象,并且可以通过创建url对象来表示url地址,而Java的applet则可以从服务器上下载到客户端上,从而实现将其中的一部分计算拿到客户端来进行。与此同时,Java提供了非常丰富的网络类库,这大大的方便了实际开发。
JavaEE具有非常强大的分布式技术基础,可以说具备强大的分布式能力。JavaSpaces、Jini、Rmi等等都为实现异构分布式计算提供了非常坚实的技术基础。
java本身是面向对象的,在任何平台上,Java源程序被编译器翻译成虚拟机能够识别的字节码,那么只要有Java虚拟机平台,就能够解释执行Java字节码程序,也就是说有了JVM的存在,保证了Java就是平台无关的。
也就是说,因为Java本身是运行在虚拟机JVM上的,这就让Java具有很大的跨平台属性,也就能具有很强的适应分布式计算环境的能力。
一,Java 是跨平台的,一次编译可到处运行。非常适合异构的系统。
二,Java 有非常强大的网络编程框架,在分布式系统中使用JAVA可更方便的实现网络通讯。
三,Java 技术社区非常庞大,有大量的优秀开源组件支持,这使得开发分布式系统变得简单。
暂时想到这几点,希望能帮到你
Java互联网架构-基于分布式Redis如何发布数据与订阅机制?
事实上,redis生来就不是干消息发布与订阅这件事的,一开始只是用做内存缓存,后来才被开发出全局唯一ID,分布式锁,消息队列这些功能!
在我们一开始没用成熟的消息中间件(mq,ons,kafka)的时候,就用了redis作为消息的发布订阅机制!
redis作为一个内存数据库,所有的数据都在内存中进行操作,只提供通过异步的方式(AOF或者RDB)进行数据的持久化,在重启的时候,从文件中把数据加载到内存,所以redis速度非常快!
redis发布订阅的原理又是啥?
redis通常分为client端(一般为多个)和server端,一个客户端(发布者)通过发送消息到channel中,redis server中会维护一份pubsub_channels字典,以channel为key,所有的channel订阅者组成的链表为value,在消息发布的时候,server会使用channel取出所有的订阅者进行遍历,然后把消息发布给所有订阅者!(为什么使用链表结构?在订阅者频繁变动的时候,链表的修改时间复杂度为O(1))!
redis作为消息发布订阅具体有什么操作呢?
1,发布者:消息的发布者通过redis的指令publish生产消息,这个指令会返回相应的值,表明消息订阅者数量!
2,订阅:消息的消费者通过subscribe指令订阅频道(可多个),这个指令会返回订阅的频道,数量,和消费的消息!
3,模糊匹配:类似于sql中的*,redis使用psubscribe指令订阅模糊的符合某个条件的所有频道!
4,取消订阅:订阅者通过unsubscribe命令取消某个频道的订阅,也会有相应的返回值!
不过!!!
redis毕竟不是专门干这个的,不提供消息持久化,不提供消息事务机制,如果消息丢了,就等着干瞪眼了,所以成熟的消息中间件是一个很好的选择!
上面这些指令很简单,只要下载个redis镜像,玩一玩就会了,更多的技术分享,敬请关注。。。