分布式架构是分布式计算技术的应用和工具,其中J2EE技术应用较为广泛,它简化和规范多层分布式企业应用系统的开发和部署,它可以给分布式应用软件提供在各种技术间共享资源的平台。掌握分布式架构,就能帮你解决实际工作中常遇到的痛点,如系统宕机、系统瘫痪、系统故障、系统臃肿等等。
无论你是Java开发者、还是分布式架构爱好者,都能在分布式架构中受到启发,让我们一起探索,揭开分布式领域中神秘面纱吧!
OSCHINA本期高手问答( 2020 年 8 月 12 日——2020 年 8 月 18 日 ) 我们请来了张程老师@zacharyos和大家一起探讨关于分布式架构相关的问题。
问答范围
本次问答主要包括以下方向:
- 分布式架构技术栈方面问题,包括但不限于高并发、高可用、高效性等问题。
- 分布式架构中性能优化问题,包括但不限于Web容器、缓存、负载均衡、队列等问题。
嘉宾简介
张程,有6年研发经验。曾就职于格瓦拉生活商务有限公司演出部门,从事Java研发以及设计方面工作,之后进入优速科技有限公司信息技术部门,从事高并发下单渠道、面单打印平台研发、全链路压测、系统容灾方案设计,并担任架构设计和技术负责人。著有《分布式架构:技术栈详解与快速进阶》一书,已由机械工业出版社出版。
为了鼓励提问@华章 会在问答结束后从提问者中抽取5名幸运会员赠与正版《分布式系统架构技术栈详解与快速进阶》一本
适读人群:
- Java软件开发人员;
- 前端H5工程师和交互工程师;
- 分布式系统工程师和架构师。
京东购买链接:https://item.jd.com/12679217.html
OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。
下面欢迎大家就相关问题向张程老师@zacharyos 提问,请直接回帖提问。
@zacharyos 您好,想请问一下,在您过去的实际项目中,对于MySQL的分库分表和读写分离是否会同时使用?如果同时使用感觉架构上有些复杂,但是不同时使用分库分表和读写分离架构的话,不知道是否有其他更好的架构进行替代?
@zacharyos 老师好
1. grpc,http,dubbo 目前你们是如何取舍的
2. 数据库的容灾做到了什么级别,同城互备?异地多活?这期间是怎样的演化过程,都上云了么?数据安全性如何保证的?
3. 分布式事务请问你们用的是柔性事务么?基于还是不基于MQ?您更倾向哪个方案呢?
谢谢老师
@zacharyos 您好,请问分布式,多个数据库的情况下怎么保证数据复制够快,不影响下单的时候查库存是准确的?加锁就慢了?
@zacharyos 您好
1、后端服务可以使用微服务进行拆分,前端开发是否有成熟可用的 微前端技术支撑微服务?
2、目前ServiceMesh 火热发现很多公司都开始着重研究 Mesh 方向,是否以后也是趋势?
@zacharyos 您好,微服务系统是当下最流行的架构,但是在具体开发过程中,对于各种实际业务的处理总会遇到很多问题,目前我遇到2个问题,虽然已经解决,但是总感觉不是很好的解决方案。
1.在分布式系统中,分库分表已经是常态,那么对于基础数据,比如:人员、用户、部门、公司等,在其他业务库里面(业务库和基础库不在同一服务器、不在同一数据库),比如:人员名称、用户名称、部门名称等类似这种基础信息,需要显示,并保证这些信息修改后能实时生效,在业务这边看到最新的信息。有什么比较好的解决方案吗?(不能增加系统复杂性、增加太多开发工作量)
2.对于java,现在用的orm框架hibernate,在sql调优这块根本没法进行。之前考虑换mybatis,但是改动工作量太大,目前新的服务和项目采用的是mybatis,但是旧的服务和项目还没发很好的解决这个问题。如果hibernate直接执行sql,那么就违背了orm初衷,很别扭。。
引用来自“君千殇520”的评论
@zacharyos 您好,微服务系统是当下最流行的架构,但是在具体开发过程中,对于各种实际业务的处理总会遇到很多问题,目前我遇到2个问题,虽然已经解决,但是总感觉不是很好的解决方案。
1.在分布式系统中,分库分表已经是常态,那么对于基础数据,比如:人员、用户、部门、公司等,在其他业务库里面(业务库和基础库不在同一服务器、不在同一数据库),比如:人员名称、用户名称、部门名称等类似这种基础信息,需要显示,并保证这些信息修改后能实时生效,在业务这边看到最新的信息。有什么比较好的解决方案吗?(不能增加系统复杂性、增加太多开发工作量)
2.对于java,现在用的orm框架hibernate,在sql调优这块根本没法进行。之前考虑换mybatis,但是改动工作量太大,目前新的服务和项目采用的是mybatis,但是旧的服务和项目还没发很好的解决这个问题。如果hibernate直接执行sql,那么就违背了orm初衷,很别扭。。
关于hibernate和mybatis混用,可以复杂查询用mybatis,增删改用的hibernate
引用来自“君千殇520”的评论
@zacharyos 您好,微服务系统是当下最流行的架构,但是在具体开发过程中,对于各种实际业务的处理总会遇到很多问题,目前我遇到2个问题,虽然已经解决,但是总感觉不是很好的解决方案。
1.在分布式系统中,分库分表已经是常态,那么对于基础数据,比如:人员、用户、部门、公司等,在其他业务库里面(业务库和基础库不在同一服务器、不在同一数据库),比如:人员名称、用户名称、部门名称等类似这种基础信息,需要显示,并保证这些信息修改后能实时生效,在业务这边看到最新的信息。有什么比较好的解决方案吗?(不能增加系统复杂性、增加太多开发工作量)
2.对于java,现在用的orm框架hibernate,在sql调优这块根本没法进行。之前考虑换mybatis,但是改动工作量太大,目前新的服务和项目采用的是mybatis,但是旧的服务和项目还没发很好的解决这个问题。如果hibernate直接执行sql,那么就违背了orm初衷,很别扭。。
可以考虑 CQRS架构,也可以用cache。
其实分布式能不分就不分,适当规模的单体其实很好。