关于shardingsphere:聊聊ShardingSphere是怎么进行sql重写的

序本文次要钻研一下ShardingSphere进行sql重写的原理 prepareStatementorg/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java public final class ShardingSphereConnection extends AbstractConnectionAdapter { @Override public PreparedStatement prepareStatement(final String sql) throws SQLException { return new ShardingSpherePreparedStatement(this, sql); } //......} ShardingSphereConnection的prepareStatement创立的是ShardingSpherePreparedStatementShardingSpherePreparedStatementorg/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java public final class ShardingSpherePreparedStatement extends AbstractPreparedStatementAdapter { @Getter private final ShardingSphereConnection connection; public ShardingSpherePreparedStatement(final ShardingSphereConnection connection, final String sql) throws SQLException { this(connection, sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT, false, null); } private ShardingSpherePreparedStatement(final ShardingSphereConnection connection, final String sql, final int resultSetType, final int resultSetConcurrency, final int resultSetHoldability, final boolean returnGeneratedKeys, final String[] columns) throws SQLException { if (Strings.isNullOrEmpty(sql)) { throw new EmptySQLException().toSQLException(); } this.connection = connection; metaDataContexts = connection.getContextManager().getMetaDataContexts(); SQLParserRule sqlParserRule = metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class); hintValueContext = sqlParserRule.isSqlCommentParseEnabled() ? new HintValueContext() : SQLHintUtils.extractHint(sql).orElseGet(HintValueContext::new); this.sql = sqlParserRule.isSqlCommentParseEnabled() ? sql : SQLHintUtils.removeHint(sql); statements = new ArrayList<>(); parameterSets = new ArrayList<>(); SQLParserEngine sqlParserEngine = sqlParserRule.getSQLParserEngine( DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType())); sqlStatement = sqlParserEngine.parse(this.sql, true); sqlStatementContext = SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData(), sqlStatement, connection.getDatabaseName()); parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement); statementOption = returnGeneratedKeys ? new StatementOption(true, columns) : new StatementOption(resultSetType, resultSetConcurrency, resultSetHoldability); executor = new DriverExecutor(connection); JDBCExecutor jdbcExecutor = new JDBCExecutor(connection.getContextManager().getExecutorEngine(), connection.getDatabaseConnectionManager().getConnectionContext()); batchPreparedStatementExecutor = new BatchPreparedStatementExecutor(metaDataContexts, jdbcExecutor, connection.getDatabaseName()); kernelProcessor = new KernelProcessor(); statementsCacheable = isStatementsCacheable(metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData()); trafficRule = metaDataContexts.getMetaData().getGlobalRuleMetaData().getSingleRule(TrafficRule.class); selectContainsEnhancedTable = sqlStatementContext instanceof SelectStatementContext && ((SelectStatementContext) sqlStatementContext).isContainsEnhancedTable(); statementManager = new StatementManager(); } //......} ShardingSpherePreparedStatement继承了AbstractPreparedStatementAdapter,其结构器次要是通过SQLParserEngine解析sql失去SQLStatement,创立DriverExecutor、BatchPreparedStatementExecutor、KernelProcessor、StatementManager;这里即便useServerPrepStmts=true,也不会触发mysql server的prepare操作executeUpdate public int executeUpdate() throws SQLException { try { if (statementsCacheable && !statements.isEmpty()) { resetParameters(); return statements.iterator().next().executeUpdate(); } clearPrevious(); QueryContext queryContext = createQueryContext(); trafficInstanceId = getInstanceIdAndSet(queryContext).orElse(null); if (null != trafficInstanceId) { JDBCExecutionUnit executionUnit = createTrafficExecutionUnit(trafficInstanceId, queryContext); return executor.getTrafficExecutor().execute(executionUnit, (statement, sql) -> ((PreparedStatement) statement).executeUpdate()); } executionContext = createExecutionContext(queryContext); if (hasRawExecutionRule()) { Collection<ExecuteResult> executeResults = executor.getRawExecutor().execute(createRawExecutionGroupContext(), executionContext.getQueryContext(), new RawSQLExecutorCallback()); return accumulate(executeResults); } return isNeedImplicitCommitTransaction(connection, executionContext) ? executeUpdateWithImplicitCommitTransaction() : useDriverToExecuteUpdate(); // CHECKSTYLE:OFF } catch (final RuntimeException ex) { // CHECKSTYLE:ON handleExceptionInTransaction(connection, metaDataContexts); throw SQLExceptionTransformEngine.toSQLException(ex, metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType().getType()); } finally { clearBatch(); } } private void clearPrevious() { statements.clear(); parameterSets.clear(); generatedValues.clear(); } private ExecutionContext createExecutionContext(final QueryContext queryContext) { ShardingSphereRuleMetaData globalRuleMetaData = metaDataContexts.getMetaData().getGlobalRuleMetaData(); ShardingSphereDatabase currentDatabase = metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()); SQLAuditEngine.audit(queryContext.getSqlStatementContext(), queryContext.getParameters(), globalRuleMetaData, currentDatabase, null, queryContext.getHintValueContext()); ExecutionContext result = kernelProcessor.generateExecutionContext( queryContext, currentDatabase, globalRuleMetaData, metaDataContexts.getMetaData().getProps(), connection.getDatabaseConnectionManager().getConnectionContext()); findGeneratedKey(result).ifPresent(optional -> generatedValues.addAll(optional.getGeneratedValues())); return result; }这里executeUpdate会先执行clearPrevious办法,清空statements、parameterSets、generatedValues,而后createExecutionContext,这里有一步是kernelProcessor.generateExecutionContextKernelProcessorgenerateExecutionContextshardingsphere-infra-context-5.4.0-sources.jar!/org/apache/shardingsphere/infra/connection/kernel/KernelProcessor.java ...

September 5, 2023 · 8 min · jiezi

关于shardingsphere:逛开发者集市啦ShardingSphere-在亚马逊云科技中国峰会等你

2023亚马逊云科技中国峰会将于6月27日-28日在上海世博核心隆重揭幕。本次峰会以“共见·价值成就”为主题,与合作伙伴瞻望云计算趋势及单干倒退策略,分享行业解决方案,独特探讨协同销售策略和全新的 APN 打算,助力合作伙伴成就更多价值。同时,峰会将聚焦构建新技术减速的产品翻新、新架构晋升的业务弹性、云计算引领的翻新模式,围绕价值减速实现,企业麻利持重,行业全新时机等热门话题,携手泛滥业内技术领导者,践行者一起,把握时代时机。 ShardingSphere 社区退出开发者集市啦本次峰会特设开发者会客厅区域,为开发者提供一站式 Demo 互动、集市打卡、大咖分享、社区圆桌等丰盛体验。ShardingSphere 开源社区也受邀退出开发者集市,欢送大家到现场与咱们面对面交换开源社区参加教训和ShardingSphere 我的项目体验。另外,ShardingSphere v5.4.0 版本将于6月底公布,期待可能在现场与大家分享新个性新性能,以及更多对于 ShardingSphere 的想法 ✨ 加入流动有好礼 ✨流动现场有惊喜哦!每一个来到 ShardingSphere 开发者集市展位的小伙伴都有机会支付咱们筹备的精美周边礼品。 玩法阐明: 现场扫描展位二维码,通过链接填写表单,即可获取刮刮乐卡片一张依据卡片提醒即可取得神秘礼品一份数量无限,先到先得哦干货满满,礼品多多,还在等什么?赶快扫描下方二维码报名吧,现场见! 对于 ShardingSphereApache ShardingSphere 是一款分布式的数据库生态系统,能够将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行加强,广泛应用于国内金融、制作、平安、物流、出行、新批发等多个行业的 300+ 用户。作为 Apache 基金会寰球顶尖开源社区,ShardingSphere 我的项目已在 GitHub 上取得超 18K Stars。

June 19, 2023 · 1 min · jiezi

关于shardingsphere:150-任务待领取ShardingSphere-社区挑战榜上新啦

Hi!ShardingSphere 社区的敌人们上午好 社区挑战榜上新!150+ 工作待支付 ... 欢送家人们踊跃报名! 通过亲自参加,你不仅能取得为寰球顶级开源社区奉献的「荣誉名称」及「贵重实践经验」, ShardingSphere 社区及社区内的其余贡献者也将反哺你更多的正向能量与新灵感! 此外,呼朋引伴来参加也能取得额定处分哦。流动详情见下方海报,期待你在社区“大展身手”,玩得尽兴:

June 15, 2023 · 1 min · jiezi

关于shardingsphere:ShardingSphere-荣获一等奖2022-年中国开源创新大赛成绩单公布

参赛回顾 “2022年中国开源翻新大赛”在国家地方网信办信息化发展局的领导下,由中国互联网倒退基金会、中国网络空间研究院、中国互联网投资基金联结主办,大赛以“开源翻新,共建生态”为主题,围绕国家在开源人才培养和开源生态建设方面的重大策略需要,聚焦“卡脖子”相干技术畛域,旨在助力开源生态的高质量倒退,激发开源翻新生机,推动我国科技翻新及产业转型降级。5 月 31 日,“2022 年中国开源翻新大赛”正式颁奖。ShardingSphere 我的项目在开源畛域的技术当先与翻新博得了来自大赛的国家部委级专家及学术界、产业界头部专家评审团的统一认可,在本次大赛中荣获一等奖! 这次获奖,对外充分证明了 ShardingSphere 在数据库相干畛域的前沿技术能力与翻新实力。另一方面,本次获奖也为 ShardingSphere 面向国内打造寰球顶级开源社区的倒退指标提供了无力的撑持与信念。将来,ShardingSphere 将持续坚韧不拔地推动开源技术创新摸索、减速推动产业利用落地、为国产科技翻新及产业降级继续做出奉献! 当先的技术劣势Apache ShardingSphere 是一款分布式的数据库生态系统,能够将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行加强。自 2016 年推出以来,通过多年的积淀与倒退,ShardingSphere 已在 GitHub 上取得超 18K Stars。作为寰球关注度高的分布式数据库生态系统,ShardingSphere 通常会呈现在企业在波及程度扩大和分布式性能的产品选型计划候选名单中。 目前,ShardingSphere 已被广泛应用于国内金融、制作、平安、物流、出行、新批发等多个行业,为企业外部大数据平台转型和国产利用可信等方面提供了绝佳的解决方案。 宽泛的行业认可ShardingSphere 于 2018 年正式进入 Apache 基金会孵化器,2019 年进入 CNCF 全景图,于 2020 年成为 Apache 顶级我的项目。2021 年度 Apache 基金会年度报告中, ShardingSphere 代码提交数量位列前十。2022 年,ShardingSphere 通过了中国信通院的「可信开源我的项目」评估认证,并取得了「OSCAR 尖峰开源我的项目及开源社区」。 2023 年年初,在开源社颁布的《2022 中国开源年度报告》中, ShardingSphere 斩获多项荣誉:在基金会中中国我的项目排行榜里,ShardingSphere 名列第一。在中国我的项目 OpenRank 排名 Top30 榜单里,ShardingSphere 位居第三。截至 2023 年 5 月,在 LibHunt 公布的前 23 名 Java Database 开源我的项目榜单中,ShardingSphere 始终名列前三。 ...

June 6, 2023 · 1 min · jiezi

关于shardingsphere:-距离-ShardingSphere-社区成都线下-Meetup-活动仅剩2天‼️

退出流动,你将能: 深刻学习数据利用治理策略拓展数据畛域大牛人脉 让咱们一起码“动”蓉城共赴线下之约!

May 25, 2023 · 1 min · jiezi

关于shardingsphere:-距离-ShardingSphere-社区成都线下-Meetup-活动仅剩3天❤️

如果你也想: ✔️理解最新数据圈动静趋势✔️与业界大咖面对面交换 赶快扫描下方流动邀请函二维码报名吧!

May 24, 2023 · 1 min · jiezi

关于shardingsphere:5月27日来-ShardingSphere-成都站-Meetup-偶遇吧

收好这份 ShardingSphere 社区正式收回的「流动邀请函」,实现扫码报名,让你头脑中的想法即刻实现落地! ShardingSphere 社区将通过组织精彩的线下 Meetup 流动,帮忙更多数据工程师们拓宽视线、高效梳理业内外围的技术脉络及其将来的倒退方向。欢送大家来加入!

May 22, 2023 · 1 min · jiezi

关于shardingsphere:国际财务系统基于ShardingSphere的数据分片和一主多从实践

作者:京东物流 张广治1 背景传统的将数据集中存储至繁多数据节点的解决方案,在性能和可用性方面曾经难于满足海量数据的场景,零碎最大的瓶颈在于单个节点读写性能,许多的资源受到单机的限度,例如连接数、网络IO、磁盘IO等,从而导致它的并发能力不高,对于高并发的要求不满足。 每到月初国内财务零碎压力微小,因为月初有大量补全工作,重算、计算工作、账单生成工作、推送集成等都要赶在月初1号实现,显然咱们须要一个反对高性能、高并发的计划来解决咱们的问题。 2 咱们的指标反对每月接单量一亿以上。一亿的单量补全,计算,生成账单在24小时内实现(反对后面说的月初大数据量计算的场景)3 数据调配规定事实世界中,每一个资源都有其提供服务能力的下限,当某一个资源达到最大下限后就无奈及时处理溢出的需要,这样就须要应用多个资源同时提供服务来满足大量的工作。当应用了多个资源来提供服务时,最为要害的是如何让每一个资源比拟平均的承当压力,而不至于其中的某些资源压力过大,所以调配规定就变得十分重要。 制订调配规定:要依据查问和存储的场景,个别依照类型、工夫、城市、区域等作为分片键。 财务零碎的租户以业务线为单位,毛病为拆分的粒度太大,不能实现打散数据的目标,所以不适宜做为分片键,事件定义作为分片键,毛病是十分不平均,目前2C进口清关,一个事件,每月有一千多万数据,鲲鹏的事件,每月单量很少,如果依照事件定义拆分,会导致数据极度歪斜。 目前最适宜作为分片键的就是工夫,因为零碎中计算,账单,汇总,都是基于工夫的,所以工夫非常适合做分片键,适宜应用月、周、作为Range的周期。目前应用的就是工夫分区,但只依照工夫分区显然曾经不能满足咱们的需要了。 通过筛选,实践上最适宜的分区键就剩下工夫和收付款对象了。 最终咱们决定应用收付款对象分库,工夫作为表分区。 数据拆分前构造(图一): 数据程度拆分后构造(图二): 调配规定 (payer.toUpperCase()+"_"+payee.toUpperCase()).hashCode().abs()%128 收款对象大写加分隔符加付款对象大写,取HASH值的绝对值模分库数量 重要:payer和payee字母对立大写,因为大小写不对立,会导致HASH值不统一,最终导致路由到不同的库。 4 读写拆散一主多从4.1ShardingSphere对读写拆散的解释对于同一时刻有大量并发读操作和较少写操作类型的数据来说,将数据库拆分为主库和从库,主库负责解决事务性的增删改操作,从库负责解决查问操作,可能无效的防止由数据更新导致的行锁,使得整个零碎的查问性能失去极大的改善。 通过一主多从的配置形式,能够将查问申请平均的扩散到多个数据正本,可能进一步的晋升零碎的解决能力。 应用多主多从的形式,岂但可能晋升零碎的吞吐量,还可能晋升零碎的可用性,能够达到在任何一个数据库宕机,甚至磁盘物理损坏的状况下依然不影响零碎的失常运行。 把数据量大的大表进行数据分片,其余大量并发读操作且写入小的数据进行读写拆散,如(图三): 左侧为主从构造,右侧为数据分片 4.2 读写拆散+数据分片实战当咱们理论应用sharding进行读写拆散+数据分片时遇到了一个很大的问题,官网文档中的实现形式只适宜分库和从库在一起时的场景如(图四) 而咱们的场景为(图三)所示,从库和分库时彻底离开的,参考官网的实现办法如下: https://shardingsphere.apache... 官网给出的读写拆散+数据分片计划不能配置 spring.shardingsphere.sharding.default-data-source-name默认数据源,如果配置了,所有读操作将全副指向主库,无奈达到读写拆散的目标。 当咱们困扰在读从库的查问会被轮询到分库中,咱们理论的场景从库和分库是拆散的,分库中基本就不存在从库中的表。此问题困扰了我近两天的工夫,我浏览源码发现 spring.shardingsphere.sharding.default-data-source-name能够被赋值一个DataNodeGroup,不仅仅反对配置datasourceName,sharding源码如下图: 由此 spring.shardingsphere.sharding.default-data-source-name配置为读写拆散的groupname1,问题解决 从库和分库不在一起的场景下,读写拆散+数据调配的配置如下: #数据源名称spring.shardingsphere.datasource.names= defaultmaster,ds0,ds1,ds2,ds3,ds4,ds5,ds6,ds7,ds8,ds9,ds10,ds11,ds12,ds13,ds14,ds15,ds16,ds17,ds18,ds19,ds20,ds21,ds22,ds23,ds24,ds25,ds26,ds27,ds28,ds29,ds30,ds31,slave0,slave1#未配置分片规定的表将通过默认数据源定位,留神值必须配置为读写拆散的分组名称groupname1spring.shardingsphere.sharding.default-data-source-name=groupname1#主库spring.shardingsphere.datasource.defaultmaster.jdbc-url=jdbc:mysql:spring.shardingsphere.datasource.defaultmaster.type= com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.defaultmaster.driver-class-name= com.mysql.jdbc.Driver#分库ds0spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql:spring.shardingsphere.datasource.ds0.type= com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.ds0.driver-class-name= com.mysql.jdbc.Driver#从库slave0spring.shardingsphere.datasource.slave0.jdbc-url=jdbc:mysql:spring.shardingsphere.datasource.slave0.type= com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.slave0.driver-class-name= com.mysql.jdbc.Driver#从库slave1spring.shardingsphere.datasource.slave1.jdbc-url=jdbc:mysql:spring.shardingsphere.datasource.slave1.type= com.zaxxer.hikari.HikariDataSourcespring.shardingsphere.datasource.slave1.driver-class-name= com.mysql.jdbc.Driver#由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,反对inline表达式。缺省示意应用已知数据源与逻辑表名称生成数据节点,用于播送表(即每个库中都须要一个同样的表用于关联查问,多为字典表)或只分库不分表且所有库的表构造完全一致的状况spring.shardingsphere.sharding.tables.incident_ar.actual-data-nodes=ds$->{0..127}.incident_ar#行表达式分片策略 分库策略,缺省示意应用默认分库策略spring.shardingsphere.sharding.tables.incident_ar.database-strategy.inline.sharding-column= dept_no#分片算法行表达式,需合乎groovy语法spring.shardingsphere.sharding.tables.incident_ar.database-strategy.inline.algorithm-expression=ds$->{dept_no.toUpperCase().hashCode().abs() % 128}#读写拆散配置spring.shardingsphere.sharding.master-slave-rules.groupname1.master-data-source-name=defaultmasterspring.shardingsphere.sharding.master-slave-rules.groupname1.slave-data-source-names[0]=slave0spring.shardingsphere.sharding.master-slave-rules.groupname1.slave-data-source-names[1]=slave1spring.shardingsphere.sharding.master-slave-rules.groupname1.load-balance-algorithm-type=round_robin能够看到读操作能够被平均的路由到slave0、slave1中,分片的读会被调配到ds0,ds1中如下图: 4.3 实现本人的读写拆散负载平衡算法Sharding提供了SPI模式的接口 org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm实现读写拆散多个从的具体负载平衡规定,代码如下: import lombok.Getter;import lombok.RequiredArgsConstructor;import lombok.Setter;import org.apache.shardingsphere.spi.masterslave.MasterSlaveLoadBalanceAlgorithm;import org.springframework.stereotype.Component;import java.util.List;import java.util.Properties;@Component@Getter@Setter@RequiredArgsConstructorpublic final class LoadAlgorithm implements MasterSlaveLoadBalanceAlgorithm { private Properties properties = new Properties(); @Override public String getType() {return "loadBalance";} @Override public String getDataSource(final String name, final String masterDataSourceName, final List<String> slaveDataSourceNames) { //本人的负载平衡规定 return slaveDataSourceNames.get(0); RoundRobinMasterSlaveLoadBalanceAlgorithm 实现为所有从轮询负载 RandomMasterSlaveLoadBalanceAlgorithm 实现为所有从随机负载平衡 ...

February 16, 2023 · 2 min · jiezi

关于shardingsphere:ShardingSphere高CPU消耗的问题

ShardingSphere官网文档https://shardingsphere.apache...一、老版本TreeMap问题在5.0.0之前的ShardingResultSet中应用的TreeMap设置的不分大小写导致的,这个源码中写死的。 1.1 标志性热点 二、5.0.0版本之后去掉了TreeMap在5.0.0版本之后,源码中用了新的后果集类ShardingSphereResultSet,并且用CaseInsensitiveMap取代了TreeMap。 三、附github上曾经有人提过相干的issue:https://github.com/apache/sha...

October 1, 2022 · 1 min · jiezi

关于shardingsphere:数据库领域资深专家韩锋正式加入-SphereEx加速公司商业化产品版图扩张

我在数据库畛域从业多年,经验了当代数据库产业的倒退流程。近些年来,数据库行业正面临转型发展期,以新力量(国产)、新形态(开源)、新技术(分布式、云原生)等个性为代表的一大批新生企业疾速成长,极大推动了行业倒退。其中 SphereEx 提出的 Database Plus 以及 Database Mesh 等理念,与我对数据库产业将来倒退的认知非常吻合。因而愿与 SphereEx 团队一起直面多元挑战,独特助力数据库产业倒退。--韩锋2022 年 8 月,数据库畛域资深专家韩锋正式以联结创始人的身份,退出到 SphereEx 公司,后续将次要负责产研及局部商业化工作。 在退出 SphereEx 之前,韩锋有二十余年的数据库行业从业教训,在金融、互联网、云计算、制造业等多个产业及畛域领有丰盛的一线数据库架构、软件研发、产品设计、团队治理教训,通过多年的积攒,韩锋在数据库畛域积淀了弱小的行业影响力。 韩锋踊跃投身于国内数据库行业生态倒退建设,在业界负责 CCIA(中国计算机协会)常务理事、前 Oracle ACE、腾讯云 TVP、阿里云 MVP、dbaplus 等多家社群创始人或专家团成员。热心技术公益分享,精通多种关系型数据库,对 NoSQL 及大数据相干技术也有涉足,实践经验丰盛,曾著有数据库相干著述《SQL 优化最佳实际》、《数据库高效优化》,累计发行量数万册。其集体经营的《韩锋频道》自媒体平台,受到宽广数据库从业者关注,累计发表 140 余篇原创文章,影响了数万人对于数据库产业的了解。 (韩锋与张亮) 数据库赛道愈发清晰,发力数据库下层生态建设随着数字化技术及利用日趋成熟,以后全行业曾经进入数字化全面倒退的新期间,数字化在国家层面失去了前所未有的器重及推动。分布式与云原生,数据库发展趋势日渐清晰清朗,但数据库市场却朝向『碎片化』的态势成长。 眼下,繁多场景曾经无奈满足利用多样化的需要,数据库的架构、协定、性能、实用场景也更加多样化,各种全新的数据库如雨后春笋般层出不穷,数据库的多元并存已是常态,数据库碎片化已呈不可逆的趋势。毫无疑问,重大碎片化的数据库畛域将会为市场带来更多不可控的因素。 针对当今现状,如何构建适应新形势下的数字化基础设施,成为各企业关注的要点。SphereEx 公司提出的构建开源、分布式、针对数据库下层利用规范的产品定位,与韩锋对行业的发展趋势判断十分匹配。 首先,单方对于数据库产业将来倒退的预判雷同凭借本身对于数据库畛域的认知,韩锋敏锐洞察到数据库将来的倒退脉络。他意识到,随着数字化过程的推动,繁多场景无奈满足利用多样化的需要,数据库碎片化已呈不可逆的趋势。而随着利用场景的一直细分,更是减速了数据库碎片化的过程,数据库的架构、协定、性能、实用场景也更加多样化。事实中各种问题和痛点如架构选型艰难、运维复杂度高、数据库间不足合作和对立治理能力等问题也逐步浮出水面。 即:『在企业的利用现状中,数据库的多元并存已是常态。碎片化是数据库畛域的大势所趋,繁多品类的数据库无奈实用于所有场景,只能实用于某一种或某几种善于的场景。』 在曾经成为一片红海的底层数据库赛道下层,尚存在一片并没有被『染指』太多的生态层,即位于数据库与前端业务之间的这部分。而这一层,就是 ShardingSphere 致力于拓展的新畛域,也是 Database Plus 理念在经由 Apache ShardingSphere 工程化实现后解决上述问题最间接形式之一。 对于 Database Plus 理念,韩锋也极为认可,曾在本人的公众号【韩锋频道】公布过对于 Database Plus 理念的解读。他认为,Database Plus 是一个专一于解决将来数据库倒退的重要理念,创造性地提出在底层数据库不变的状况下,通过在其下层构建加强计算引擎,冲破原有数据库性能局限,晋升数据基础设施整体性能下限。 只管作为一种新的数据应用思维,Database Plus 目前还处在绝对晚期阶段。但通过这一理念落地的成绩,ShardingSphere 已展现出不错的倒退态势。在底层成熟的数字基础设施之上,以凋谢、规范、可插拔为领导准则,构建面向增值能力的数据利用根底平台。帮忙用户疾速晋升数据利用程度,构建规范的数字化基础设施。 其次,韩锋集体倒退与 SphereEx 倒退路线统一自开始工作以来,韩锋就始终在从事与数据库相干的技术工作。数据库理念雷同、行业倒退认知雷同,技术实现办法雷同.....退出 SphereEx,曾经成为牵强附会的事件。 在数据库大一统格局难以到来的前提下,在碎片化数据库的下层构建对立治理、服务的生态,势必将成为将来晋升数据库实用能力、开掘数据库增长后劲以及拓宽数据库利用场景的外围形式。而作为 Database Plus 理念的提出者,SphereEx 在连续了 ShardingSphere『连贯、加强、可插拔』个性之外,在此基础上进一步延展了 Database Plus 的理念,在商业层面做了进一步实现,为更多应用 Apache ShardingSphere 的企业,以及有数字化转型需要的企业提供更加业余的技术服务与产品生态。 ...

August 16, 2022 · 1 min · jiezi

关于shardingsphere:创新能力加速产业发展SphereEx-荣获中关村银行杯『大数据与云计算』领域-TOP1

8 月 9 日下午,2022 中关村国内前沿科技翻新大赛“中关村银行杯”大数据与云计算畛域决赛在北京市门头沟区中关村(京西)人工智能科技园·智能文创园落下了帷幕。SphereEx 凭借本身在数据库畛域产品与理念的双重翻新劣势,得以在现场强烈的角逐中怀才不遇,荣获『大数据与云计算』畛域的第一名。现场,SphereEx 的技术实力与理念劣势失去了大赛评委与现场参赛者的统一必定。 本次大赛由北京市科委、中关村管委会,门头沟区政府联结领导,中关村高科技产业促成核心、中关村科技园区门头沟园治理委员会、中关村前沿科技与产业服务联盟主办,北京中倒退智源人工智能科技倒退有限公司承办,至今已间断举办 5 届,吸引了海内外 10000 多个翻新我的项目报名加入,500 多个优良初创企业和守业团队怀才不遇,极大促成了核心技术冲破以及翻新技术的落地利用,俨然已成为行业内验证技术落地可行性与翻新理念正确性的『试金石』。 (大赛评审现场) 作为业余的开源异构分布式数据服务平台的软件供应商,SphereEx 核心技术团队深耕数据库畛域十余年,简直经验了当代数据库演变的残缺历程。因此 SphereEx 对数据库产业的将来倒退走向以及当下利用痛点均有着十分粗浅的意识,在理念与理论数据利用层面均实现了翻新。 产品能力翻新在本次大赛中,SphereEx 以本身商业化平台 SphereEx-EntSuite 实现了产品技术创新,其囊括了 SphereEx-DBPlusEngine、一键部署工具 SphereEx-Boot、可视化平台 SphereEx-Console 三款工具,从装置部署到可视化管控,再到企业级定制服务,为企业提供全面的一站式数据利用体验。通过可插拔架构构建基于数据库之上的生态系统,SphereEx 可能为企业提供数据分片、多租户、弹性伸缩、数据备份复原、数据迁徙等能力,同时具备流量审计、权限治理、平安审计和加密等性能,为企业解决在数字化转型中面临的诸多应用难点,减速数字化利用赋能。 技术理念翻新基于对数据库产业倒退的研判,SphereEx 提出『Database Plus』与『Database Mesh』的理念,以迷信理念为技术驱动,被动跟进企业技术平台选型趋势,打造异构数据库的下层规范和生态。不管在本地还是云端,SphereEx 均为企业创始了新的数据应用治理形式,更是成为一次以数据库产业为能源减速企业数字化建设的胜利翻新。 此次奖项的取得,是市场及用户对 SphereEx 数据技术和产品的充分肯定。SphereEx 以翻新为企业的倒退基本,从宏观的产业实践高度,到中观的数据利用场景设计,再到宏观的数据分片、加密等利用能力层面均提出了不同于以往的翻新理念与实际。将来 SphereEx 将持续放弃以技术创新推动产业降级的策略步调,一直构建与晋升企业内驱力,以数据智能技术推动企业数字化转型降级。

August 16, 2022 · 1 min · jiezi

关于shardingsphere:Pisanix-v020-发布|新增动态读写分离支持

1.动静读写拆散介绍1.1 介绍读写拆散是业界应用 MySQL 高可用最罕用的计划之一,在理论场景中能够进步查问性能,升高服务器负载。本次版本在 v0.1.0 动态规定根底上减少了动静感知读写拆散性能。 在动静感知的读写拆散中,须要配置读写拆散的规定。Pisa-Proxy 会依据规定进行 SQL 路由。如图1.1 Pisa-Proxy 后端会启动 4个 Monitor 对后端集群状态进行感知。Monitor Reconcile 会对 Monitor 上报的数据进行计算聚合并得出后端集群最终状态,再由 Monitor Reconcile 将状态信息通过 channel 下发给 RulesMatch,RulesMatch 拿到音讯后会动静调整后端数据源列表。 这里的概念有: 节点: 指后端数据库节点。RulesMatch:RulesMatch 引擎通过编写的规定集,与 Pisa-Proxy 接管到的 SQL 查问语句做匹配。TargetRole: 指通过规定匹配引擎匹配到的 TargetRole 组,每个 TargetRole 组里可能会有一个或多个节点。LoadBalance:负载平衡模块会依照相应的算法从 TargetRole 组里选取一个适合的节点。TargetInstance:指由 LoadBalance 模块选出的节点。Discovery:发现类型,对应于后端数据源应用的高可用策略,例如: MHA,RDS,MGR等等,本版本中次要反对了 MHA。Monitor: 指 Pisa-Proxy 对后端的探测模块,在 MHA 中次要依赖于4种 Monitor: Connect Monitor: 探测数据库连通性。Ping Monitor: 探测数据库是否衰弱。Replication Lag Monitor: 探测主从复制提早状态。Read Only Monitor: 探测主从数据库角色 1.2 读写拆散配置读写拆散配置规定配置形式同动态读写拆散保持一致,动静读写拆散配置项如下: 参数类型是否依赖默认值含意userstring是None探测模块执行查看 SQL 语句用户名passwordstring是None探测模块执行查看 SQL 语句明码monitor_periodu64是1000探测模块更新感知后端数据源状态周期(毫秒)connect_periodu64是1000Connect 模块探测周期(毫秒)connect_timeoutu64是6000Connect 模块探测超时工夫(毫秒)connect_failure_thresholdu64是1Connect 模块探测失败重试次数ping_periodu64是1000Ping 模块探测周期(毫秒)ping_timeoutu64是6000Ping 模块探测超时工夫(毫秒)ping_failure_thresholdu64是1Ping 模块探测失败重试次数replication_lag_periodu64是1000Replication Lag 模块探测周期(毫秒)replication_lag_timeoutu64是6000Replication Lag 模块探测超时工夫(毫秒)replication_lag_failure_thresholdu64是1Replication Lag 探测失败重试次数max_replication_lagu64是10000用户定义主从最大延迟时间阈值(毫秒)read_only_periodu64是1000Read Only 探测周期(毫秒)read_only_timeoutu64是6000Read Only 探测超时工夫(毫秒)read_only_failure_thresholdu64是3Read Only 探测失败重试次数CRD 配置示例: ...

August 4, 2022 · 2 min · jiezi

关于shardingsphere:Database-Plus-的云上之旅SphereEx-正式开源-ShardingSphere-on-Cloud-解决方案

作为 Database Plus 设计哲学的最佳实际,Apache 顶级开源我的项目 ShardingSphere 通过各行业多年的生产环境测验,受到了泛滥社区爱好者的关注和追捧。而随着 Kubernetes 成为容器编排的事实标准,其引领的云原生风暴迅速席卷了技术世界。Apache ShardingSphere 作为一个领有凋谢生态的数据库加强引擎,其设计理念和 Kubernetes 有着诸多相似之处,而在这股云原生浪潮之下,社区对 ShardingSphere 上云的呼声也越来越高,于是 SphereEx 率先推出了本人对于 ShardingSphere 云上的解决方案 ShardingSphere-on-Cloud,心愿以此为 ShardingSphere 飞向将来的翅膀,开启 Database Plus 的云上之旅。 shardinsphere-on-cloud 仓库将陆续公布对于 Apache ShardingSphere 在云上的各种配置模板、自动化脚本、部署工具以及 Kubernetes Operator 等最佳实际内容。目前 shardingsphere-on-cloud 已公布 v0.1.0 版本,次要蕴含了 ShardingSphere Operator 的最小可用版本。 ShardingSphere OperatorKubernetes 可能成为云原生编排工具的事实标准的重要起因之一在于它弱小的可扩展性,能够帮忙开发人员疾速建设平台之上的平台。对于各种尝试运行在 Kubernetes 之上的软件,通过 Kubernetes 的 Operator 模式配合 CustomResourceDefinition 框架能够疾速构建自动化保护能力。 6 月 17 日,Apache ShardingSphere 在 5.1.2 版本中曾经公布了基于 Helm Charts 的包治理能力。如果说 Helm Charts 曾经帮咱们解决了 ShardingSphere 在 Kubernetes 之上的 Day 1 相干问题,即如何在 Kubernetes 中进行形容 ShardingSphere,并且将其进行部署。 ...

August 1, 2022 · 2 min · jiezi

关于shardingsphere:DistSQL-深度解析打造动态化的分布式数据库

一、背景自 ShardingSphere 5.0.0 版本公布以来,DistSQL 为 ShardingSphere 生态带来了弱小的动静治理能力,通过 DistSQL,用户能够: 在线创立逻辑库;动静配置规定(包含分片、数据加密、读写拆散、数据库发现、影子库、全局规定等);实时调整存储资源;即时切换事务类型;随时开关 SQL 日志;预览 SQL 路由后果;...同时,随着应用场景的深刻,越来越多的 DistSQL 个性被发掘出来,泛滥宝藏语法也受到了用户的青睐。 二、内容提要本文将以数据分片为例,深度解析 Sharding 相干 DistSQL 的利用场景和应用技巧。同时,通过实际案例将一系列 DistSQL 语句进行串联,为读者展示一套残缺实用的 DistSQL 分片治理计划。 本文案例中将用到以下 DistSQL: 三、实战演练3.1 场景需要创立两张分片表 t_order 和 t_order_item;两张表均以 user_id 字段分库,以 order_id 字段分表;分片数量为 2 库 x 3 表;如图: 3.2 环境筹备筹备可供拜访的 MySQL 数据库实例,创立两个新库 demo_ds_0、demo_ds_1; 以 MySQL 为例,也可应用 PostgreSQL 或 openGauss 数据库。2.部署 Apache ShardingSphere-Proxy 5.1.2 和 Apache ZooKeeper,其中 ZooKeeper 将作为治理核心,存储 ShardingSphere 元数据信息; 3.配置 Proxy conf 目录下的 server.yaml,内容如下; mode:type: Cluster repository: type: ZooKeeper props: namespace: governance_ds server-lists: localhost:2181 # ZooKeeper 地址 retryIntervalMilliseconds: 500 timeToLiveSeconds: 60 maxRetries: 3 operationTimeoutMilliseconds: 500 overwrite: falserules: - !AUTHORITY users: - root@%:root启动 ShardingSphere-Proxy,并应用客户端连贯到 Proxy,例如mysql -h 127.0.0.1 -P 3307 -u root -p3.3 增加存储资源创立逻辑数据库 ...

July 21, 2022 · 4 min · jiezi

关于shardingsphere:终于可以一行代码也不用改了ShardingSphere-原生驱动问世

一、背景ShardingSphereDataSourceFactory 是 Apache ShardingSphere-JDBC 端的最根底用户 API,它用于将用户的规定配置对象进行转化,并生成为规范 DataSource 的实现。除此之外,它还提供了用于 YAML 配置的 YamlShardingSphereDataSourceFactory,以及用于 Spring 的自定义命名空间和 Spring Boot Starter。 DataSource 是规范的 Java JDBC 接口,工程师能够通过它进一步创立合乎 JDBC 规范的 Connection、Statement、PreparedStatement、ResultSet 等耳熟能详的规范对象。完全符合 JDBC 接口的实现,让工程师应用 Apache ShardingSphere-JDBC 与应用原生的 JDBC 没有区别,也能够透明化的对接各种 ORM 框架。 二、痛点尽管规范的 JDBC 接口,能够在开发过程中齐全适配,但通过 ShardingSphere API 创立 DataSource,却扭转了工程师的原有的数据库驱动加载形式。尽管只须要批改大量(一行)的启动代码,然而对于心愿平滑迁徙至 ShardingSphere 的零碎来说,切实地减少了额定的开发成本;且对于无奈把握源码的零碎(如:外采零碎)来说,应用 ShardingSphere 则困难重重。 始终以来,ShardingSphere 都不足 JDBC 驱动的实现,这次要受限于它的设计初衷。通过 Java 配置的 ShardingSphere-JDBC 能够将灵便度晋升到可编程级别,但 JDBC 的 Driver 接口则并未提供太多可额定配置的空间,仅通过 URL 和 Properties,会大幅限度 ShardingSphere 的配置灵便度。YAML 配置尽管能够和 Driver 的 URL 更好的适配,且可读性更强,但属于动态配置的领域,与动静配置的灵便度相比,则显著有余。因而,ShardingSphere-JDBC 采纳数据库连接池的类似策略,绕过了 JDBC 标准接口的限度,间接将 DataSource 裸露给用户。 ...

July 6, 2022 · 2 min · jiezi

关于shardingsphere:开源二三事|ShardingSphere-与-Database-Mesh-之间不得不说的那些事

背景前段时间,以 Apache ShardingSphere 外围团队组建的守业公司 SphereEx,正式对外推出了 Database Mesh 2.0 概念以及与之相配套的开源产品 Pisanix,这引发了社区间对于 ShardingSphere 和 Database Mesh 的不少争执与思考。许多用户都很分明,SphereEx 是由 Apache ShardingSphere 外围团队创建的。 那么有局部用户就提出了疑难,既然曾经有了 Apache ShardingSphere 这样一个如此胜利的开源我的项目,为何还要大费周章抉择在一个全新的畛域从头开始?在云原生趋势的影响下,将来 ShardingSphere 会不会逐步被并入到 Database Mesh 的理念体系中? 随着 SphereEx 推出 Database Mesh 2.0 概念,并开拓了另一条开源倒退路线,看似与此前曾经大获胜利的 ShardingSphere 产生了抵触,但实际上,两者是“同气连枝、相辅相成”的关系。本篇将次要针对 ShardingSphere 社区用户对于 Database Mesh 概念以及将来倒退方向做出整体论述,率领大家从头梳理 Apache ShardingSphere 的领导理念 Database Plus,以及与 Database Mesh 理念之间的脉络分割。 一、从微服务治理到云原生数据库服务治理,变在了哪?相比于微服务,云原生下的数据库治理在性能抉择上会有不同的偏重。 首先,数据库是有状态的,申请无奈像服务一样被随便路由到对等节点,因而对于数据库而言,数据分片是一个重要的能力;另外,因为数据库连贯自身具备状态性,启动或进行一个新的数据库实例,往往意味着数据同步和复制,因而相较于微服务,实例主动发现能力的重要性就会升高。 如果将数据库看作为一个微服务,尽管能够通过 Service Mesh 对数据库拜访进行治理,但却会受到许多限度。同时,数据库领有一些非凡治理属性,比方通信协议、资源管理、基于数据申请的负载平衡、分库分表、还有可观测性、访问控制等。这些都不能简略地以服务的概念来了解和解决,而是属于数据库可靠性工程畛域的问题。 这就为 Database Mesh 的倒退提供了空间。SphereEx 提出的 Database Mesh 2.0 概念更关注在云原生环境下,如何实现以下几个指标: 进一步加重开发人员的心智累赘,进步开发效率,提供通明和无感的数据库基础设施应用体验;以可配置、可插拔、可编程的形式,实现一个笼罩数据库流量、运行时资源和稳定性保障等方面的治理框架;为异构数据源、云原生数据库、分布式数据库等多个数据库畛域的典型场景提供规范的应用界面。提供数据分片、负载平衡、可观测性、审计等能力,这些能力曾经解决了数据库治理中属于流量治理的局部问题。更近一步地,当业务利用开始以容器的形式进行打包交付、利用 CI/CD 流水线每天公布成千盈百次到各个数据中心的 Kubernetes 基础设施的时候,引发了对云环境下如何实现数据库可靠性工程的思考,Database Mesh 2.0 就是在这种思考之下的产物。 ...

June 27, 2022 · 2 min · jiezi

关于shardingsphere:Apache-ShardingSphere-512-发布|全新驱动-API-云原生部署打造高性能数据网关

在 Apache ShardingSphere 5.1.1 公布后,ShardingSphere 合并了来自寰球的团队或集体的累计 1028 个 PR,为大家带来 5.1.2 新版本。该版本在性能、性能、测试、文档、示例等方面均有不少优化。值得一提的是,本次更新带来了以下全新性能: ShardingSphere-Proxy Helm ChartSQL 方言翻译以 Driver 模式应用 ShardingSphere-JDBC这些全新的能力让 ShardingSphere 的数据网关能力失去了质的晋升,助力 ShardingSphere 在云上部署,优化用户体验。 除了上述新性能,本次更新大量晋升了 SQL 解析反对度,内核、运行模式、弹性伸缩都欠缺了对 PostgreSQL / openGauss schema 的反对,弹性伸缩、事务、DistSQL 在健壮性与用户体验方面也有不少晋升。 本篇将给大家介绍 ShardingSphere 5.1.2 版本更新内容。 新性能介绍应用 Helm 部署 ShardingSphere-ProxyShardingSphere-Proxy 提供了 Docker 镜像以便于用户容器化部署。不过,对于须要在 Kubernetes 部署 ShardingSphere-Proxy 的用户,还须要自行处理数据库驱动挂载、配置挂载、自定义算法挂载等必要步骤,部署过程绝对繁琐,运维老本绝对较高。 ShardingSphere 本次更新带来了全新的 ShardingSphere-Proxy Helm Chart。这项新性能由企业级、云原生数据加强计算产品及解决方案提供商 SphereEx 向 Apache ShardingSphere 社区捐献,推动 Apache ShardingSphere 在云原生方向后退。 ShardingSphere 在集群模式下依赖注册核心存储元数据,ShardingSphere-Proxy 的 Helm Chart 可能主动部署 ZooKeeper 集群,帮忙用户疾速搭建 ShardingSphere-Proxy 集群。 ...

June 21, 2022 · 4 min · jiezi

关于shardingsphere:做数据时代的加油站ShardingSphere-为易车数据库架构演进提供新动力

Apache ShardingSphere 前段时间应邀来到易车北京总部,PMC Chair 张亮与易车的技术同学在数据加解密、扩容、迁徙、上云等话题开展了深度交换与探讨。作为中国当先的汽车互联网企业,易车深耕汽车行业二十余载,为中国汽车用户提供业余、丰盛的互联网资讯和导购服务,并为汽车厂商和汽车经销商提供行之有效的互联网营销解决方案。在公司“1234”的策略推动下,易车技术团队考查并抉择了ShardingSphere,为优化数据服务提供更多抉择。在探讨最初,张亮也示意,ShardingSphere 外围团队将与易车 DBA 团队放弃严密沟通,单方将建设起长期的技术单干关系,独特为凋敝 ShardingSphere 社区生态而致力。 在数据加解密计划中,能够通过 Proxy 来对立实现吗?这个是能够的,无论是通过 Proxy 或是 JDBC 都能实现,只用 Proxy 也是没问题的。如果须要将数据迁徙至 Proxy 端,Apache ShardingSphere 提供了弹性迁徙模块,用户齐全不须要放心迁徙、上线的解决问题。其次,随着业务的增长和变动,兴许企业前期会须要对曾经分片解决过的数据库进行二次分片。Apache ShardingSphere 联合 Scaling 能够实现数据分片的弹性伸缩,保证系统能够随着业务变动而一直调整,从而满足业务快速增长的需要。 另一方面,ShardingSphere 的加密与个别数据库的内容加密不同,是基于行列级别进行加密。如常见身份证、明码等等因素,只须要通过 ShardingSphere 将这些因素进行加密即可。此外,ShardingSphere 通过对这部分能力进行标准化并集成在中间件生态上,自动化用户对新、旧业务的数据脱敏以及加解密的过程,整个过程实现了用户层面的无感知。同时反对多种内置的数据加解密/脱敏算法,用户也可依据本身状况来自定义扩大相应的数据算法。 在数据扩容或迁徙时,如何在不停服的状况下实现数据扩容?对于新增数据如何解决?在数据迁徙形成中,分为存量数据迁徙以及增量数据迁徙,数据体量越大耗时越长。同时增量数据往往是动态变化的,为了最终确认两端数据统一,肯定是须要一段停写工夫,让日志可能追上来并实现校验。Apache ShardingSphere 能够将数据迁徙工作分为多个局部并行执行,合并同一记录的批改操作,在配置上之后再执行一条命令进行主库的写入,使主库只具备只读的权限,同时在只读期间暂停 SQL 执行并在停写的霎时确保数据是全局统一的,进而再操作切库,缩小对于零碎可用性的影响。 当下大部分企业为了保障高牢靠以及高吞吐量,往往会对数据库进行主从配置。如何确保主从库之间的数据一致性,尤其是在数据迁徙过程中,须要可能在简直不影响业务的状况下实现数据校验。Apache ShardingSphere 提供了多种内置的比对策略和数据一致性校验算法,用以比拟源端数据和指标端数据是否统一,默认应用 CRC32 以便在速度与一致性上获得均衡,且校验算法反对 SPI 自定义。 ShardingSphere 上云后,与利用和云之间的兼容性问题不论是在云上还是本地,次要是利用连贯 ShardingSphere,如果该利用有部署负载平衡,间接更改拜访 URL 即可。 另外一种形式,能够依据 Database Mesh 设计理念,在每一个利用端部署一台 Sidecar,利用 Sidecar 来收集和探测 ShardingSphere 自身,从基本状态层面保障高可用。Database Mesh 为用户提供了齐全隔离不同环境的能力。 对于 Database Mesh,面向运维工程师时,用户只需变更数据面板到分布式数据库的网络配置,以规范界面配置数据库拜访规定、资源配额、数据变更、可观测性等;面向研发工程师,Database Mesh 对其齐全屏蔽了数据库所在的具体网络地址,研发工程师只需面向本地数据库进行开发,无需感知分布式数据库的存在。 通过 Database Mesh 提供的云原生服务,将来用户可通过接管控制面板发送的指令,来执行限流、熔断、基于标签的路由等操作。将来,所有云上数据库流量的治理和管制都能够交由 Database Mesh 体系来进行治理,既能够治理一般的数据库,也能够搭配 ShardingSphere-Proxy 管控端。 ...

June 1, 2022 · 1 min · jiezi

关于shardingsphere:覆盖-70-核心业务ShardingSphere-如何成为喜马拉雅架构演进的催化剂

文章来源于沈辉背景喜马拉雅成立之初,各个业务管理各自的数据库、缓存,各个业务都要理解中间件的各种部署状况,导致业务间的单干,须要运维、开发等方面的人工染指,效率较低,扩大艰难,平安危险也很高,资源利用率也不高。喜马拉雅在倒退中,逐步意识到须要在公司层面,提供对立的定制化的数据拜访平台的重要性。为此,咱们推出了本人的 PaaS 化平台,PaaS 化就是对资源的应用做了对立的入口,业务只须要申请一个资源 ID,就能应用数据库,达到对资源应用的全副系统化,其中对数据库的拜访咱们基于 Apache ShardingSphere 来实现,并基于 Apache ShardingSphere 弱小性能做些优化和加强。 整体架构咱们 PaaS 平台建设中,负责和数据层通信的 dal 层中间件咱们叫 Arena,其中对数据库的拜访咱们叫 Arena-Jdbc。 Arena-Jdbc 层的能力根本是基于 Apache ShardingSphere 的能力建设,咱们只是基于喜马拉雅须要的个性做了加强和优化,整体架构如下: Pull FrameConsul Pull Frame 是咱们对 Consul 的配置主动拉起封装为对立的 Pull 框架,咱们除了数据库,还有缓存,每种还有不同的应用形式,咱们对不同的应用形式只须要实现对应的实现类和初始化,更新,切好这些接口就行,框架会对立把解析好的数据给到,具体一种场景不须要关怀和 Consul 的交互,为前面的资源 PaaS 化提供了简略的接入能力。 故障容灾· 主动重连 咱们对故障容灾在设计时就思考了平时通用的一些故障场景,比方数据库 server 挂了,咱们做主动重链,不须要业务做重启操作。 · 本地快照 本地快照是为了避免 Consul 不可用时,业务不能启动,所以咱们在拉到近程配置后,会本地存储一份,在拉配置时,如果近程失败,就用本地的配置,保障 Consul 挂了,不影响业务,每次拉到新的配置时,会更新本地的快照。 · 灰度更新 灰度更新是为了反对配置变更时找灰度的逻辑,对于数据库层面的变更,是十分危险的,如果一下就全量变更,有可能会触发线上事变,所以通过灰度变更的机制,业务能够先抉择一个容器实例来变更,没有问题后,再全量变更,把危险降到最低。 · 明码平安 没有 PaaS 化之前,咱们的数据库明码都是 DBA 对立治理的,但 PaaS 化后,拜访数据库的明码就存在配置文件中,如果明文,就太不平安,所以咱们对明码对立做了加密解决,在 Arena-Jdbc 层对立做解密,确保明码不会泄露进来。 对立数据源为了让业务做最低老本的革新,Arena-Jdbc 须要提供一个对立的数据源,不管下层用什么框架,不影响业务只须要替换数据源接入即可,对于数据库连接池咱们默认应用 HikariCP DataSource 也反对个性化的业务,业务能够通过配置指定连接池。 咱们基于 Apache ShardingSphere 的连接池封装了一个咱们本人的 DataSource,咱们叫 ArenaDataSource,通过 ArenaDataSource 封装了各种不同场景聚合的应用一个 ArenaDataSource 反对三种应用形式: ...

May 13, 2022 · 3 min · jiezi

关于shardingsphere:Apache-ShardingSphere-遇上得物彩虹桥

Apache ShardingSphere 技术团队此前应邀到得物上海总部,与得物的技术同学对于 ShardingSphere 的应用教训进行了交换。得物 App 是寰球当先的集副品潮流电商和潮流生存社区于一体的新一代潮流网购社区。随着得物 App 用户开始快速增长,业务线日趋丰盛,也对底层数据库带来了较大的压力。得物技术团队采纳了 Apache ShardingSphere 来缓解底层数据库压力,并对其进行了深度革新和性能优化。 得物基于 Proxy 的革新:彩虹桥此前,得物在多个业务场景下应用 ShardingSphere-JDBC 来进行数据分片,在应用 ShardingSphere-Proxy 时,也连续了别离部署多套 Proxy 集群这类的架构模式,并以 Apache ShardingSphere 5.0.0-alpha 版本为根底,自研了一套得物数据库代理层中间件:彩虹桥。 在与得物技术团队的交换中,发现了 ShardingSphere 在很多非凡场景下的利用后劲,将来在后续 ShardingSphere 社区版本的迭代中,得物技术团队也将会作为社区核心成员,参加到将来我的项目布局、性能搭建中来。 对于 ShardingSphere-Proxy 的部署形式而言,能够在面向整个团体业务之上部署一套 Proxy 集群进行对立治理,也能够依据不同业务须要,独立为每一条业务部署对应的 Proxy 集群。目前,在得物的业务场景下,绝大部分外围业务域都配置有 Proxy 集群,每个业务域下会有很多应用服务,如交易业务域下有商品、订单等多个服务,这些服务共用同一个 Proxy 集群。此外如供应链等多个业务下,都会有各自对应的模型集群,以缩小其它业务变更对整体平台所产生的影响,升高业务危险。 同时在 ShardingSphere 的根底上,得物自研了一套零碎,并在这个零碎中实现了如集群一键切换等能力。如某个集群有问题的话,就能够将集群上服务的流量全副都切到另外集群下面去,实现无损公布。同时,得物对业务的连接池也做了一些革新。因为底层数据库与 ShardingSphere-Proxy 之间是长连贯,如果要实现无损公布,就须要对连接池进行革新。首先基于以后连接池的状态,如果是闲暇状态,能够先把负载平衡流量摘掉,再回到连接池里做柔性敞开。如果非闲暇状态,就等连接池应用结束后再敞开掉,进而确保灰度公布过程中保证数据无损。 Apache ShardingSphere 压测问题与全链路追踪得物目前采纳了两种压测形式,一种是用自定义 Hint 的模式,即 SQL 正文的形式,传输压测包含一些额定信息。另外一种形式,通过先发一条 SQL 到 Proxy 确认是否存在 Hint 信息,而后再收回一条真正的 SQL。然而如此一来会发送两条 SQL,导致响应工夫升高。目前 ShardingSphere 社区也曾经将相干问题纳入到将来布局之中,将与得物技术团队共同完成相干难题的技术攻坚工作。 与压测场景随同着的是 Tracing 全链路追踪的问题。在得物的业务场景中,因为采纳了分库分表策略,整体架构从上到下相对而言都比较复杂。得物技术团队通过 Hint 形式实现了全链路追踪,不过对性能却会不可避免地产生肯定影响。 Apache ShardingSphere 举荐的影子库能力,配合 CyborgFlow,能够实现全链路在线压测。全链路在线压测是⼀项简单⽽庞⼤的⼯作,须要各个微服务、中间件之间配合实现。借助于 ShardingSphere 强⼤的 SQL 解析能⼒,对执⾏ SQL 进⾏影⼦断定,同时联合影⼦算法灵便的配置,满⾜简单业务场景的在线压测需要。压测流量路由到影⼦库,线上失常流量路由到⽣产库,从⽽帮忙⽤户实现压测数据与生产数据的隔离,解决数据净化问题。 ...

May 13, 2022 · 1 min · jiezi

关于shardingsphere:SphereEx-一周年保持热爱奔赴下一场『云』海

2021 年 5 月 6 日,SphereEx 的故事正式开始 2022 年 5 月 6 日,是 SphereEx 一周年的生日 过来一年,是从零开始、疾速成长的一年 咱们许多的“第一次”都在这一年中实现 从第一款商业版产品面市,取得第一份企业荣誉 实现第一次融资,第一篇国内顶会收录的论文... 短短一年,咱们经验了太多,更成长了许多... 欢送点击链接,理解更多内容: Apache ShardingSphere 官网:https://shardingsphere.apache.org/ Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere SphereEx 官网:https://www.sphere-ex.com

May 13, 2022 · 1 min · jiezi

关于shardingsphere:SphereEx-正式成为-CNCF-会员持续完善云原生环境下的数据库基础设施

近日,SphereEx 正式成为寰球出名开源组织 CNCF(云原生计算基金会,Cloud Native Computing Foundation)银牌会员。在自身所保持的开源策略下,SphereEx 将继续推动数据库技术在云原生环境下的适配与倒退。 CNCF 云原生基金会成立于 2015 年,是 Linux 基金会旗下的子基金机构。CNCF 是云原生畛域最具影响力的社区组织,旗下汇聚了 AWS、阿里云、华为、苹果、谷歌云、IBM、Cisco 等寰球顶级科技公司,各级会员总数已达到 792 家,影响力简直已笼罩到云原生环境的各个角落。 SphereEx 云上策略依据权威咨询机构 IDC 预测,到 2022 年,75% 的数据库将被部署或迁徙至云平台。在产业数字化转型时代下,技术架构向云原生演进是不可逆的时代潮流,但从目前的停顿来看,大多数互联网巨头的应用层根本都曾经实现了微服务或者服务网络的革新,然而数据面却还处在相当碎片化的状况。 在此背景下,SphereEx 面向整个数据库产业提出实用于云原生环境下的新理念,Database Mesh。借力 Database Mesh,SphereEx 将可能提供高效、可控、规范的数据库治理体验。开发工程师只需面向本地数据库进行开发,无需感知分布式数据库的存在。运维和 DBA 工程师能够通过基础设施即代码的形式,以规范界面配置数据库拜访规定、资源配额、数据变更、可观测性等。 SphereEx 心愿利用 Mesh 的设计思维,为工程师提供规范可扩大的数据库拜访体验,帮忙各个企业梳理“碎片化”的数据库,实现云原生环境里的数据库可靠性工程,最终减速数据库上云过程。 作为一家开源原生公司,SphereEx 始终践行着开源策略。此次正式成为 CNCF 会员,也正是寰球顶尖开源社区组织对于 SphereEx 开源理念的认可。 往年 6 月,SphereEx 将正式公布一款面向云原生环境下数据库治理产品 Pisanix。将来,SphereEx 还将与 CNCF 开展更多深层次的单干,独特推动云原生技术在数据库场景中的落地与倒退。 欢送点击链接,理解更多内容: Apache ShardingSphere 官网:https://shardingsphere.apache.org/ Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere SphereEx 官网:https://www.sphere-ex.com

May 13, 2022 · 1 min · jiezi

关于shardingsphere:Apache-ShardingSphere-企业行|走进携程

前段时间,Apache ShardingSphere 核心技术团队应邀来到携程上海总部,PMC Chair 张亮与携程的技术同学针对 ShardingSphere 一些应用场景的话题开展了深度交换与探讨。携程团体作为寰球当先的一站式旅行平台,为确保用户体验及业务发展,近年来一直加大在人工智能、云计算等方面的研发和投入力度。尤其在后盾数据库,随着用户增长和业务扩张带来的流量增长,或多或少增长的数据体量都会对性能产生肯定的影响。因为对性能的要求更加极限,这也是携程在外部采纳 ShardingSphere-JDBC 分片能力的起因。 在应用的过程中,携程技术团队也逐步成为了 Apache ShardingSphere 社区的外围用户,其对于 ShardingSphere 也进行了更加高阶段的定制化革新与利用。前段时间,携程技术团队曾将实际 Apache ShardingSphere 的过程整顿成一篇技术干货,感兴趣的同学可点击下方链接查看。 *链接:干货 | 数据为王,携程国内火车票的 ShardingSphere 之路 以下为交换过程中外围探讨内容摘要: ShardingSphere 能够针对某些特定的数据源反对用户自定义连贯吗?是反对的。在 ShardingSphere 中,数据库方言真正的须要做的就是生成不同的方言取数据以及用不同的驱动去取数据这两方面。一方面,ShardingSphere 通过 SQL 体系将特定的数据源转换为语法树,再通过语法树转成查问计划数,通过查问计划数再反向生成 SQL 方言。其中 SQL 方言能够生成为 MySQL、PostgreSQL、Hbase 等不同的数据库方言,SQL 方言到数据库如何执行这部分是反对自定义扩大,为开发者提供更弱小的自定义能力,以便配合业务定制各种高级个性。 另一方面是须要用不同的驱动取数据,通过查问打算树去做剖析。查问计划数与 SQL 方言没有关系,只须要更改查问打算树里的表名或算子名称,依据这些再来生成 SQL,之后将取出来的数据通过 ShardingSphere 的算子从新做计算即可。因而,用驱动取数据所面向的是执行打算,和 SQL 方言无关。 当然,这样做也会产生一个问题,即从很多中央抽取过去的数据都被集中一起做计算,对内存和 CPU 的占比会十分高,进而导致性能呈现降落。ShardingSphere 在执行过程中会尽量升高计算比重,将不必要在内存中计算的局部尽量下推。因为 ShardingSphere 是 TP 计算引擎,这就决定了 ShardingSphere 必须要在同一个线程中做计算,否则无奈保障事务的先后。社区正在布局实现 AP 计算来大幅度晋升计算能力,但 AP 计算就无奈保障事务先后,这就须要用户依据场景诉求和所能接受的业务得失去抉择。 数据增量迁徙场景下,在迁徙实现后会对数据进行校验吗?Apache ShardingSphere 提供了多种内置的数据一致性校验算法,用以比拟源端数据和指标端数据是否统一,默认应用 CRC32 以便在速度与一致性上获得均衡,且校验算法反对 SPI 自定义。在数据迁徙形成中,数据体量越大耗时越长,同时增量数据往往是动态变化的,为了最终确认两端数据统一,肯定是须要一段停写工夫,让日志可能追上来并实现校验。而对于性能的影响,则在于这段停写工夫的长短。 Apache ShardingSphere 能够将数据迁徙工作分为多个局部并行执行,合并同一记录的批改操作,在配置上之后再执行一条命令进行主库的写入,使主库只具备只读的权限,同时在只读期间暂停 SQL 执行并在停写的霎时确保数据是全局统一的,进而再操作切库,缩小对于零碎可用性的影响。此外,ShardingSphere 的校验算法也反对用户依据场景须要来定制规定,赋予了用户更高的自由度。 ...

May 6, 2022 · 1 min · jiezi

关于shardingsphere:谈谈对-Database-Plus-认识与畅想

文章来源于韩锋频道“Database Plus”,是近期比拟炽热的一个理念,其最早是由我前共事、现 SphereEx 公司 CEO 张亮率先提出的,并通过开源我的项目 ShardingSphere 做了工程化实现。作为一名数据库畛域从业者,对这一理念有着本人的一些解读。 1. 对 Database Plus 的解读作为数字基础设施的外围,数据库扮演着愈发重要的作用。从数据库承当的最为奢侈的职能来看,可大抵分为两个局部即存储和计算。作为数据的次要载体,数据库的一大职能是实现数据的存储,保障数据安全可用;第二大职能为数据计算,即在存储根底上提供数据的下层计算。这里所说的计算具备十分宽泛领域,既包含对数据简略的 CRUD,也包含对数据的高阶剖析、开掘及更为广大的其余计算场景。随着近些年数字化转型深入,数据被提到更高层面失去器重,数据品种、规模迅速收缩,同时企业对数据应用出现多样化特点且针对个性能力提出更高要求。相应的也对数据底层基础设施之一的数据库提出了相应的要求。这里可集中体现在实时性、敏捷性、安全性、可用性、经济性、智能化、高性能、强管控、自主化、开放性、交融化及创新性等诸多方面。这部分可参考之前文章数字化转型下数据库面临的12个挑战(https://mp.weixin.qq.com/s/zy...)。 而 Database Plus 理念的外围定位,正是基于上述现状,创造性地提出在底层数据库不变的状况下,通过在其下层构建加强计算引擎,冲破原有数据库性能局限,晋升数据基础设施整体性能下限。通过对 Database Plus 理念产品 ShardingSphere 性能研读,其对数据计算做了三层划分。一是原生数据库的计算能力,依据数据库的不同,其原生计算能力各有差别。ShardingSphere 实现与底层数据库的解耦,可灵便对接多种数据源,充沛复用原生数据库提供的根底能力。二是根底计算的加强能力,这部分次要是指对数据库自有外围能力的加强。受限于宿主数据库的性能缺失,可通过此形式加强其能力。比拟典型的能力如数据分片、分布式事务、分布式查问优化等。三是数据利用计算的加强能力,数据最终是要参加到利用中能力施展价值,在这一过程中须要对数据产生大量业务计算。很多原生数据库是不具备或不善于解决这种利用类计算。可通过这一模式扩大加强计算。比拟典型的能力如数据加密、数据脱敏、数据压测、拜访审计等。 过来针对这三类需要,通常有两种门路。一种门路是通过一直加强数据库内核,一直叠加性能满足一、二类诉求,很多功能强大的数据库产品不断涌现,但也不可避免面临内核的简单、宏大及臃肿,同时也大幅贬低工程化实现难度和复杂度。第二种门路是构建很多垂直的数据利用满足第三类诉求。这种形式不在数据库本身实现,而是通过齐全独立的利用零碎实现。当然在企业中就会面临运维繁多技术产品和大量竖井式的利用而无奈整合的困境。咱们从 ShardingSphere 的实现上看,其提出可插拔理念及下层插件化利用,可用一种形象的比喻来概括就是“双擎能源+涡轮增压”。这一从汽车畛域衍生过去的概念,可很好地诠释其实现理念。原生的数据库提供的根底算力引擎,如传统的汽油发动机;ShardingSphere 提供的根底计算加强可比喻为涡轮增压局部,其在原生数据库计算引擎之上,加强其能力;第三局部利用计算的加强则可了解为第二引擎,如新兴的电力引擎。通过这种混合能源+涡轮增压的配置,可大幅晋升原有动力系统,满足用户更好的能源要求。但同时有一点不可漠视,就是无论怎么加强对用户是无感的,用户可见的只是能源加强了。还原到实在场景下,就是用户仍然会应用数据库,仍然通过 SQL 语句计算数据和治理数据库,但对应数据库本身曾经是一个“Super Database”了。 除此之外,Database Plus 理念还有一点不容忽视。这里谈到的 Plus 的概念,是十分多元的,能够在其上叠加大量的性能。这些性能是灵便的、发散的,甚至是个性化。而作为传统数据库的定位是规范的、对立的根底软件,很难满足上述要求。而作为 Database Plus 理念实际产品 ShardingSphere,率先提出了“插件化、可插拔”思维,可满足对灵便多变的计算反对,同时借助平台层提供的统一标准的拜访形式,旨在打造数据库下层利用、治理的规范。用户及生态合作伙伴,齐全可依据本身场景需要丰盛插件能力,晋升产品性能内涵。打造出属于本人的“DIY DB”或“组件化 DB”的产品。ShardingSphere 自身也是心愿能吸引到更多的共享者,打造残缺的数据库应用生态。 2. 内部挑战及 DB Plus 解决之道上文谈到了数字化转型深入中对数据库提出的若干挑战,这里咱们就若干挑战内容略微开展阐明并谈谈作为 Database Plus 理念的实践者 ShardingSphere 是如何解决这些问题的。 大规模数据规模爆炸式增长是目前面临的痛点问题之一。为解决这一问题,比拟惯例的就是数据分片,即通过数据的打散升高单体数据处理规模,因此可承载更大的数据量。目前分布式数据库的解决思路根本都是这种。这其中的难点问题在于数据分片的规定是什么?一种形式是采纳内置的分片策略,用户无需感知。这种形式的用户体验很好,用户可齐全依照一个“BIG DB”来应用它。很多在数据分片下的能力,齐全能够零碎内置。很多原生分布式数据库产品就是这种策略,它的性能下限很高,比拟合乎使用者对数据库的定位。但这一形式有不可回避的问题在于,分布式架构的引入所造成稳定性、高性能及其他性能缺失。第二种形式是凋谢分片策略,用户可依据业务需要干涉分片的地位。这种形式对用户有肯定浸入性,但也做到更好掌控。很多基于中间件演进的分布式数据库产品基于此类。这类产品稳定性绝对更好,可满足高性能要求等。ShardingSphere 的策略与第二种形式相似,只是做的更为极致,其原生提供了更为丰盛和弱小的分片能力的同时,还提供给用户充沛的自主权,可实现精密粒度的用户定制工作。 实时性实时性对企业数字化转型尤为重要,实时鲜活的数据对企业尤为重要。传统单机/集中式数据库通过存储构造优化、缓存的引入、执行打算优化、软硬件联合等方面很好地满足了实时性要求。但在分布式条件下,上述优化伎俩不再无效。此外,分布式架构下数据库须要跨组件参加计算也拖慢数据实时性反馈。如何复用单机/集中式数据库的能力,在分布式场景下满足需要成为要害。ShardingSphere 提供的 Driver 模式,给人眼前一亮的感觉。其将加强计算能力上移到利用侧,缩短拜访链路,晋升整体性能,满足对数据实时性的要求。当然,这一形式有人造缺点,仅限于 Java 利用可应用。 安全性数据安全,是近些年来的热门话题。从监管方的频频出台各项政策,可见一斑。作为承载数据的主体,数据库首当其冲将更为器重平安问题。从数据存储、数据拜访、数据传输、数据利用等多角度解决数据安全问题。传统的解决形式是通过数据库与平安零碎配合来实现上述要求,用户须要依赖引入内部平安应用软件并去适配多种数据库来实现。ShardingSphere 的插件化理念,可通过引入多种平安插件能力来实现,并且对外提供规范数据库接口。针对多数据库栈的问题,也可通过灵便的适配能力来解决,甚至在下层提供对立的数据视角,实现高阶的数据安全治理行为。 可用性可用性,是数据库需提供的基本保障。之前单机架构或集中式架构,个别是通过高可用硬件+软件来解决;对于新兴的分布式架构来说,其组件更多也更为简单,且对于硬件也无较多要求,这就要求软件自身提供更高要求。ShardingSphere 的解决思维是利用底层数据库原生高可用能力,并买通与后者的感知能力。充分利用成熟数据库的本身能力实现。当然,这种形式存在局限,针对全局的可用性是无奈解决的,目前只能在单体层面解决。 经济性随着数据存储规模越来越大,对数据计算要求越来越高,整体数据存储和计算的老本也整体进步。特地是在现有分布式架构下,对资源耗费尤为显著。上述都造成用户较高的经济老本。ShardingSphere 走了另一条路线,它通过计算逻辑上移,将计算资源和利用合并部署,缩小对底层资源新的需要,可进步经济性。当然这里须要思考资源抵触问题,它的最新版本仿佛解决了这个问题。 简化交融数字化深入带来的技术需要的多元化,与之对应的产品计划也出现同样的态势,对于数据库方面尤为显著。尽管能够通过对立治理角度去简化治理,但对于用户而言依然不得不去面对简单的应用问题。如果通过对立接口提供能力,无疑对用户十分有吸引力,这就是简化交融诉求的起源。Database Plus 提倡的在数据库下层构建对立、规范、凋谢的生态,正符合这一诉求。将来对数据库的应用,齐全可依据下层统一标准来施行。针对如数据安全、拜访审计、访问控制等诉求,都可思考在下层解决。当然这外面难点不少,如何形象屏蔽上层简单细节值得沉思。 ...

April 29, 2022 · 1 min · jiezi

关于shardingsphere:Apache-ShardingSphere-代码格式化实战-Spotless

龙台,Apache ShardingSphere Contributor,GitHub 2.2K star hippo4j 作者,Github ID:longtai-cn。为什么要代码格式化?代码格式化的意义是让代码更加 易读易懂易批改。 ShardingSphere 作为 Apache 顶级开源我的项目,截止以后已有 380+ 贡献者。因为大部分开发人员的代码格调不统一,在 Github 多人合作的模式下,不易保障我的项目整体代码格局。 基于以上诉求,ShardingSphere 采纳了 Spotless 充当代码格局对立的角色。 什么是 SpotlessSpotless 是反对多种语言的代码格式化工具,反对 Maven 和 Gradle 以 Plugin 的模式构建。 Spotless 对开发者来说,有 2 种应用形式:查看代码是否存在格局问题,以及格式化代码。 ShardingSphere 采纳 Maven 构建我的项目,以下若无非凡申明,Spotless 应用 Maven 做演示。如何应用下述代码是 Spotless 官网示例。 user@machine repo % mvn spotless:check[ERROR] > The following files had format violations:[ERROR] src\main\java\com\diffplug\gradle\spotless\FormatExtension.java[ERROR] -\t\t····if·(targets.length·==·0)·{[ERROR] +\t\tif·(targets.length·==·0)·{[ERROR] Run 'mvn spotless:apply' to fix these violations.user@machine repo % mvn spotless:apply[INFO] BUILD SUCCESSuser@machine repo % mvn spotless:check[INFO] BUILD SUCCESS通过 mvn spotless:check 查看我的项目代码时发现错误,接着应用 mvn spotless:apply 进行代码格式化;再次查看时,格式化谬误隐没。 ...

April 28, 2022 · 4 min · jiezi

关于shardingsphere:Amazon-Aurora-读写能力扩展之-ShardingSphereJDBC-篇

文章起源亚马逊 AWS 官网博客 孙进华亚马逊云科技资深解决方案架构师,负责帮忙客户进行上云架构的设计和征询。退出 AWS 前自主守业负责电商平台搭建和车企电商平台整体架构设计。曾就任于寰球当先的通讯设备公司,负责高级工程师,负责 LTE 设施零碎的多个子系统的开发与架构设计。在高并发、高可用零碎架构设计、微服务架构设计、数据库、中间件、IOT 等方面有着丰盛的教训。 1.前言Amazon Aurora 是亚马逊云科技自研的一项关系数据库服务,它在提供和开源数据库 MySQL、PostgreSQL 的完整兼容性同时,也可能提供和商业数据库媲美的性能和可用性。性能方面,Aurora MySQL 可能反对到与开源规范 MySQL 等同配置下五倍的吞吐量,Aurora PostgreSQL 可能反对与开源规范 PostgreSQL 等同配置下三倍的吞吐量的晋升。在扩展性的角度,Aurora 在存储与计算、横向与纵向方面都进行了性能的加强和翻新。 Aurora 的最大数据存储量当初反对多达 128TB,而且能够反对存储的动静膨胀。计算方面,Aurora 提供多个读正本的可扩展性配置反对一个区域内多达 15 个读正本的扩大,提供多主的架构来反对同一个区域内 4 个写节点的扩大,提供 Serverless 无服务器化的架构实例级别的秒级纵向扩大,提供寰球数据库来实现数据库的低提早跨区域扩大。 随着用户数据量的增长,Aurora 曾经提供了很好的扩展性,那是否能够进一步加强更多的数据量、更多的并发拜访能力呢?您能够思考利用分库分表的形式,来反对底层多个 Aurora 集群的配置。基于此,蕴含这篇博客在内的系列博客会进行相应的介绍,旨在为您进行分库分表时代理或者 JDBC 的抉择提供参考。 1.1为什么要分库分表 AWS Aurora 提供了关系型数据库单机,主从,多主,寰球数据库等托管架构模式能够满足以上各种架构场景,但分库分表的场景下 Aurora 没有提供间接的反对,并且分库分表还衍生进去如垂直与程度多种状态,再进一步晋升数据容量的状况下,也带来一些须要解决的问题,如跨节点数据库 Join 关联查问、分布式事务、执行的 SQL 排序、翻页、函数计算、数据库全局主键、容量布局、分库分表后二次扩容等问题。 1.2分库分表的形式查问一次所花的工夫业界公认 MySQL 单表容量在 1 千万以下是最佳状态,因为这时它的BTREE索引树高在 3~5 之间。通过对数据的切分能够在升高单表的数据量的同时,将读写的压力摊派到不同的数据节点上,数据切分能够分为:垂直切分和程度切分。 1.垂直切分的长处 解决业务零碎层面的耦合,业务清晰; 与微服务的治理相似,也能对不同业务的数据进行分级管理、保护、监控、扩大等; 高并发场景下,垂直切分肯定水平的晋升 IO、数据库连接数、单机硬件资源的瓶颈。 2.垂直切分的毛病 分库后无奈 Join,只能通过接口聚合形式解决,晋升了开发的复杂度; 分库后分布式事务处理简单; 仍然存在单表数据量过大的问题(须要程度切分)。 3.程度切分的长处 ...

April 27, 2022 · 4 min · jiezi

关于shardingsphere:Amazon-Aurora-的读写能力扩展之-ShardingSphereProxy-篇

文章来源于亚马逊 AWS 官网博客 马丽丽亚马逊云科技数据库解决方案架构师,十余年数据库行业教训,先后涉猎 NoSQL 数据库 Hadoop/Hive、企业级数据库 DB2、分布式数仓 Greenplum/Apache HAWQ 以及亚马逊云原生数据库的开发和钻研。 1. 前言Amazon Aurora 是亚马逊云科技自研的一项关系数据库服务,它在提供和开源数据库 MySQL、PostgreSQL 的完整兼容性同时,也可能提供和商业数据库媲美的性能和可用性。性能方面,Aurora MySQL 可能反对到与开源规范 MySQL 等同配置下五倍的吞吐量,Aurora PostgreSQL 可能反对与开源规范 PostgreSQL 等同配置下三倍的吞吐量的晋升。在扩展性的角度,Aurora 在存储与计算、横向与纵向方面都进行了性能的加强和翻新。Aurora 反对多达 128TB 的存储容量,而且反对 10GB 为单位的存储层动静膨胀。计算方面,Aurora 提供多个读正本的可扩展性配置反对一个区域内多达 15 个读正本的扩大,提供多主的架构来反对同一个区域内 4 个写节点的扩大,提供 Serverless 无服务器化的架构实例级别的秒级纵向扩大,提供寰球数据库来实现数据库的低提早跨区域扩大。 随着用户数据量的增长,Aurora 曾经提供了很好的扩展性,那是否能够进一步解决更多的数据量、反对更多的并发拜访呢?您能够思考利用分库分表的形式,来反对底层多个 Aurora 集群的配置。基于此,蕴含这篇博客在内的系列博客会进行相应的介绍,旨在为您进行分库分表时抉择应用代理或者 JDBC 提供参考。 本篇博客会聚焦如何应用 ShardingSphere-Proxy,一个开源的分库分表中间件工具,来进行数据库集群的构建,会涵盖分库分表、读写拆散、动静配置等方面。 2. ShardingSphere-Proxy 介绍作为中间件,ShardingSphere-Proxy 的定位是透明化的数据库代理端。它采纳 Apache2.0 协定,继续迭代版本,最新版本为 5.1.0,目前反对 MySQL 和 PostgreSQL 版本。它对应用程序通明,兼容 MySQL/PostgreSQL 协定的客户端。MySQL 命令行 mysql,MySQL workbench 等都能够间接拜访 ShardingSphere-Proxy。 ShardingSphere-Proxy 上层能够连贯不同的数据库,这些数据库能够是同构也能够是异构的。用户能够有两种形式指定底层数据库的分库分表或者读写拆散规定:1)依据 yaml 配置文件动态指定;2)利用 ShardingSphere 提供的增强性的 DistSQL 语言来指定。因为 DistSQL 反对动态创建规定不须要重启 Proxy 自身,它成为 ShardingSphere-Proxy 将来倒退的重点。 ...

April 25, 2022 · 13 min · jiezi

关于shardingsphere:Apache-ShardingSphere-企业行|走进中信云网

为进一步理解各家厂商的利用场景与深层次需要,晋升企业研发团队在应用 Apache ShardingSphere 的效率,Apache ShardingSphere 社区开启了【走进企业】系列流动。 2 月 28 日,Apache ShardingSphere 核心技术团队应邀来到中信云网,Apache ShardingSphere PMC Chair、SphereEx CEO 张亮与中信云网的技术同学在开源生态建设、ShardingSphere 场景解决方案等方面开展了深度交换和探讨。 作为一家由中信集团全资成立的产业互联网赋能平台服务型公司,联合本身物联网、云计算以及大数据平台,曾经造成智能建造、智慧园区、智慧水务、智能制作、衰弱养老、智慧农业等多个深度聚焦行业场景的产品及解决方案,中信云网开始思考如何在现有数据库体系上进行技术革新,以反对多个产业的翻新倒退。与此同时,作为中间件畛域最驰名的开源我的项目之一,随同着 Apache ShardingSphere 生态的扩充,Apache ShardingSphere 的能力与中信云网的技术场景逐步产生了交加。 迁徙后如何确保数据统一 业务倒退到肯定阶段,激增的业务压力以及数据量的暴发会给企业带来新的挑战,Scale-Out 的形式可无效解决以上问题。 Apache ShardingSphere 通过 Scaling 工具实现在线的弹性扩容,同时也提供了多种内置的数据一致性校验算法,用以比拟源端数据和指标端数据是否统一,默认应用 CRC32 以便在速度与一致性上获得均衡,且校验算法反对 SPI 自定义。数据迁徙工夫和数据量级成正比,为保障两端数据统一,个别须要停机窗口来让日志追平,最初通过 Scaling、业务层以及数据库层实现数据校验。 Apache ShardingSphere 能够将数据迁徙工作分为多个局部并行执行,合并同一记录的批改操作,在配置上之后再执行一条命令进行主库的写入,使主库只具备只读的权限,同时在只读期间暂停 SQL 执行并在停写的霎时确保数据是全局统一的,进而再操作切库,缩小对于零碎可用性的影响。 JDBC 与 Proxy,面向不同外围用户 Apache ShardingSphere 反对 JDBC 接入、Proxy 接入这两种模式,云上 Mesh 接入的形式正在研发中,用户能够按具体需要来做选型,在原有集群之上来做分片、读写拆散、数据迁徙等相干操作。 ShardingSphere-JDBC 面向应用 Java 的研发人员,定义为一款轻量级的 Java 框架,可将其了解为一款加强的 JDBC 驱动程序,其性能更高,对于性能损耗在 2%-7% 之间,如果专一于调优,可能损耗 0.1% 都不到,更可能满足研发人员的需要。研发人员可能通过 JDBC 客户端间接拜访数据库,以 jar 的模式提供服务,不须要额定的部署和依赖。 ...

March 17, 2022 · 1 min · jiezi

关于shardingsphere:详探-Apache-ShardingSphere-SQL-Parse-Format-功能

图片 陈出新,SphereEx 中间件研发工程师,Apache ShardingSphere Committer,目前专一于 Apache ShardingSphere 内核模块的研发工作。常常应用数据库的敌人们肯定见过无比简单的 SQL,以上面的 SQL 语句为例,你能立即看进去这条 SQL 的含意吗? <div class="output_wrapper" id="output_wrapper_id" style="font-size: 16px; color: rgb(62, 62, 62); line-height: 1.6; word-spacing: 0px; letter-spacing: 0px; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;"><pre style="font-size: inherit; color: inherit; line-height: inherit; margin: 0px; padding: 0px;"><span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">select</span> a.order_id,a.status,<span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">sum</span>(b.money) <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">as</span> money <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">from</span> t_order a <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">inner</span> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">join</span> (<span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">select</span> c.order_id <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">as</span> order_id, c.number * d.price <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">as</span> money <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">from</span> t_order_detail c <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">inner</span> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">join</span> t_order_price d <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">on</span> c.s_id = d.s_id) b <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">on</span> a.order_id = b.order_id <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">where</span> b.money > <span class="hljs-number" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(170, 87, 60); word-wrap: inherit !important; word-break: inherit !important;">100</span> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">group</span> <span class="hljs-keyword" style="font-size: inherit; line-height: inherit; margin: 0px; padding: 0px; color: rgb(149, 90, 231); word-wrap: inherit !important; word-break: inherit !important;">by</span> a.order_id</pre></div> ...

February 28, 2022 · 34 min · jiezi

关于shardingsphere:The-Data-Way-Vol9|还不清楚商业化之于开源的价值建议你看看这家公司

对于「The Data Way」 「The Data Way」是由 SphereEx 公司出品的一档播客节目。这里有开源、数据、技术的故事,同时咱们关注开发者的工作日常,也探讨开发者的生存日常;咱们聚焦开源,也激励开发者踊跃拥抱开源以外的多彩生存。这些,都将在「The Data Way」的节目中一一失去展示。 目前「The Data Way」已上线喜马拉雅、网易云音乐、小宇宙、Apple Podcasts、皮艇等音频平台,每双周周一更新,欢送大家踊跃点击订阅,第一工夫接管来自「The Data Way」的更新动静。上期回顾请点击这里。 随着开源文化的风行,国内开始涌现出越来越多的开源以及创业项目。在明天,开源曾经不再仅限于一种理念、一种喜好,其作为一种由开发者主导的商业行为,正逐步取得了来自行业用户与市场的认可。 本周,由 SphereEx 推出的【The Data Way Vol.9】持续更新。本期节目以『RedHat:第一家通过开源软件获得商业化胜利的公司』为主题,为大家讲述世界上迄今为止最胜利的开源商业化案例。 点进这里链接,来听听看吧 01 红帽开源的两个外围:合作与通明 开源文化是要将一个指标很大、实现过程很简单的事件或我的项目拆分进去,化整为零,不同的人做不同的事。将大指标拆分为一个个短期内可实现的小指标,并在实现的过程中一直调整、一直优化最终的方向,让所有人都能充沛参加到我的项目的成长和建设中来,这就是开源的文化和目标。因而,在崇尚开源理念的社区中,其治理理念肯定也是围绕『促成所有人翻新』为外围来凋谢组织能力与决策通明的。如果依照一个人所设定的打算实施,只管所有人会有着一个比拟具象化的指标,但却会在无形中妨碍大家的翻新。 从成立之初,红帽就始终在保持凋谢组织外围能力。在红帽的体系下,任何人有想法就能够提出来,没有解决方案能够找到任何人帮忙,甚至是 CEO。能够说,红帽将组织中的合作能力与决策透明度这两点,施展到了最有价值的中央。 02 从买断制到订阅制,红帽引领着开源商业模式的转变 商业模式没有新与旧、对与错的区别,用户为之买单的那款商业模式就是最适宜于当下市场的商业模式。 红帽所颠覆的旧模式,也就是一次性付款的买断制软件受权。「一手交钱,一手交货」的传统商品交易模式,这种形式存在不稳固的危险。随着软件开发畛域一直上涨的老本和继续投入的需要,使之在经济层面成为了一项高风险流动,买断制更是加剧了这种危险。在大版本公布之初销售额可达到顶峰,尔后便逐步回落,在两个大版本之间必然存在漫长的低收入间期。对于企业管理者而言,当曾经提前预知到大部分营收会集中在软件公布后的三个月内,在三个月后如何放弃能源来更新利用以保障产品的安全性与兼容性呢? 因而,红帽抉择订阅制这种按期付费的模式,使付费门槛升高,用户得以用绝对低廉的价格用上更加高效的生产力工具。而高价必然会吸引更多的付费用户,「薄利多销」反倒能减少开发者的支出,维持绝对安稳的支出现金流也赋予了开发者继续更新保护利用的能源。 同时,订阅制这种形式真正将开源的理念融入到商业行为中。企业不再须要通过一个大版本来实现在市场上的试错,而是可能在一直优化迭代的过程中察看市场和用户的变动,赋予产品更加灵便的调整空间。 03 一款胜利商业化开源我的项目,对于企业的收益是微小的 2019 年,IBM 以约 340 亿美元收买了红帽公司,突破了历史上最大的软件收买记录。红帽作为 IBM 旗下独立业务部门运作,并纳入 IBM 云计算与认知软件业务的财务报表。在 IBM 2 月公布的 2019 Q4 财报中指出,自收买红帽后,IBM 负债缩小 100 亿美元。而云计算与认知软件业务已增长为 IBM 四季度最大业务,创收 72.4 亿美元,其中红帽营收增速达 24%。在被纳入 IBM 之后,红帽业务仍然保持高速增长,连带着还让 IBM 交出一份难看的财务报表。 欢送点击这里链接来收听,同时欢送大家关注咱们的公众号(SphereEx)回复“播客”进入播客听友群与更多的敌人交换!

January 13, 2022 · 1 min · jiezi

关于shardingsphere:SphereEx-完成近千万美元-PreA-轮融资加速构建新一代数据库生态引擎

2022 年 1 月 4 日,创新型数据库根底软件提供商 SphereEx 发表实现近千万美元 Pre-A 轮融资。本轮融资由嘉御资本领投,红杉中国种子基金、初心资本、指数创投跟投。这是继 2021 年 5 月以来,SphereEx 实现的又一笔融资,也是公司成立半年多来实现的第二笔融资。本轮融资资金将次要用于 SphereEx 产品研发及商业化验证。 SphereEx 是一家致力于构建新型分布式数据库基础设施的公司,由 Apache ShardingSphere 核心成员于 2021 年 4 月创建,同年 5 月取得红杉中国种子基金和初心资本的数百万美元天使轮投资。公司团队核心成员均来自头部互联网公司及出名基础设施软件提供商,具备丰盛的根底软件架构、研发、施行、交付及市场化教训。 随着国内社会逐渐迈入数字时代,作为数字经济的重要基础设施,数据库的重要性日益凸显。依据第三方机构评估,到 2025 年中国数据库市场规模将达到 688 亿元。能够设想在整个数据库畛域中,将有更多的市场机会。另一方面,随着十四五布局的开展,开源生态失去来自政策层面的策略反对,开源所引领的全新合作形式正在深刻影响着企业应用技术的轨迹。作为开源生态的重要参与者之一,SphereEx 从成立之初就明确示意将在开源这条路线上坚韧不拔地走上来。作为 Apache 软件基金会的顶级我的项目,通过多年的积淀与倒退,Apache ShardingSphere 在 GitHub 上取得超 15K Stars 的关注,成为行业内最受欢迎的开源我的项目之一。其原生的开源模式,具备很强的网络传播效应,先发劣势显著。 SphereEx 将站在 Apache ShardingSphere 这个伟人的肩膀上,构建优质的商业化产品和企业级服务。 基于可插拔架构底座公布首个 Database Plus 理念实际版 为了使企业连贯数据与利用更简略、增量和迅速地反对数据业务和多元生态反对的数据服务需要,SphereEx 推动了 Apache ShardingSphere 的微内核和可插拔架构模型的设计和落地,为社区用户提供轻量级与灵便度并存的组件化开源产品的同时,也为企业级产品提供了增量性能的对立入口。 在 SphereEx 的全力支持下,Apache ShardingSphere 5.0.0 GA 版本于 2021 年 11 月 10 日,进入 Apache 软件基金会三周年的纪念日正式公布,这是 Database Plus 首个理念实际版。Database Plus 是通过在碎片化的同构或异构数据库之上搭建应用和交互的规范层和生态层,并叠加扩大更多计算能力,使得所有利用和数据库之间的交互面向 Database Plus 构建的规范层,从而屏蔽数据库碎片化对下层业务带来的差异化影响。这一版本的公布,让 Apache ShardingSphere 正式开启了以可插拔架构为外围的全新阶段,实现了由过来数据分片繁多性能,到现今异构数据库下层规范和生态的身份转变与能力晋升。将来,SphereEx 将通过产品版本的继续更新重塑碎片化趋势下的数据库格局,买通数据与利用的沟壑,满足用户在数据库多样化应用场景的需要,为数据库行业带来全新的解决方案。 ...

January 4, 2022 · 1 min · jiezi

关于shardingsphere:『SphereEx-年终贺礼』专注为用户提供更好的使用体验

SphereEx 成立已有半年工夫,公司的倒退逐步步入到快车道,也逐步摸索出一条商业与开源并重的倒退路线。邻近 2021 年末,SphereEx 全新官网、一键治理部署工具 SphereEx-Boot、海内倒退等一系列产品和成绩陆续亮相和颁布,为所有关怀 SphereEx 的敌人们献上一份年初贺礼。『官网』SphereEx 官网全新降级上线科技引领数据将来,单干打造凋谢生态,SphereEx 全新官网正式上线。更加扁平化、科技化、精益求精的设计,为用户在页面上停留的每一秒,点击的每一步操作,都带来舒服的感触和晦涩的体验。 SphereEx 新官网首页 目前官网已上线四大页面,后续相干页面及性能将陆续凋谢,帮忙用户实现最间接的信息检索。 **『SphereEx 官网链接』https://sphere-ex.com/zh/** 在应用官网中如果您发现有任何问题或有余,欢送到中文社区留言与咱们反馈,期待大家的反馈和倡议:(https://community.sphere-ex.com/t/topic/658)。『工具』SphereEx-Boot,一键部署管理工具上线作为一款基于 Python 开发的用于方便管理 ShardingSphere-Proxy 集群的命令行工具,SphereEx-Boot 可能对 ShardingSphere-Proxy 进行装置、启动、进行、查看运行状态、卸载等操作。在 Apache ShardingSphere 生态体系愈发宏大的背景下,SphereEx-Boot 承当着集群管理工具的角色,治理着 Apache ShardingSphere 生态下泛滥的组件。 SphereEx-Boot 逻辑架构 SphereEx-Boot 产品劣势疾速上手:通过 SphereEx-Boot 工具,只需执行一行命令就可运行任意 ShardingSphere-Proxy 集群组件;易运维:SphereEx-Boot 工具能够疾速装置,疾速部署 ShardingSphere-Proxy 集群。对 ShardingSphere-Proxy 集群进行相干治理,升高运维老本;易扩大:提供标准化的程度扩大性能,可通过减少数据服务器的数量随时随地动静地对集群进行扩容。**『SphereEx-Boot 官网地址』https://sphere-ex.com/zh/products/boot/** 『生态』SphereEx 海内倒退进入新阶段SphereEx 作为一家开源原生公司,以顶级 Apache 开源我的项目 ShardingSphere 为基石,继续向周围拓宽生态边界,通过本身技术来连贯寰球开发者。对于 SphereEx 而言,国际化是一条与国内等同重要的赛道。 自成立之初,SphereEx 始终保持海内外并行的倒退策略,也粗浅意识到造就公司全球化视线之于后续业务发展的重要性。因而,SphereEx 十分重视开源社区的建设以及海内用户群体的保护拓展。通过踊跃排汇海内的先进理念,深度参加海内各类技术型会议,进而造成真正具备国际化影响力的数据平台。 截止今日,SphereEx 在海内曾经积淀了一批用户,积攒了肯定的声量与影响力。 SphereEx CTO 潘娟取得 AWS Data Hero 奖项,SphereEx 云端能力与布局取得国内认可;资助 ApacheCon 北美、ApacheCon 亚洲区等各类开源性会议,以商业公司的身份,反哺开源社区建设;积极支持寰球各种开源流动,谷歌开源之夏、Anitab.org Grace Hopper Celebration and Open Source Day 等一系列面向开发者的实际流动。亲力亲为,在海内一线开发者群体中增长 SphereEx 的影响力;踊跃加入 OpenInfra Days、Open Source India 等各类开源国际性会议,面向海内用户群体输入 SphereEx 产品能力。**『SphereEx Twitter 地址』https://twitter.com/Sphere_Ex** ...

December 30, 2021 · 1 min · jiezi

关于shardingsphere:实现一键部署与高效集群管理SphereExBoot-正式上线

在 Apache ShardingSphere 开源的这几年来,随着应用场景和用户群体一直拓宽,Apache ShardingSphere 本身的社区规模失去了快速增长,其能力与性能也博得了行业与用户的良好口碑。但 Apache ShardingSphere 在集群治理、产品部署等层面依然存在着操作繁琐、门槛较低等有余,这些都在肯定水平上限度了 Apache ShardingSphere 面向新场景和高级用户的推广。针对于此,经验半年工夫的研发和打磨,SphereEx 于今日正式对外上线了一款基于 Python 开发、用于方便管理 ShardingSphere-Proxy 集群的命令行工具:SphereEx-Boot,并收费对外开放。 安装包获取地址:https://download.sphere-ex.com/boot/spex-0.1.0.tar.gz 对于 SphereEx-Boot在各种系统软件和应用软件的装置治理中,集群管理工具均有着宽泛的利用,它们的呈现大大简化了软件装置和降级保护工作,SphereEx-Boot 正是为了解决这一问题而诞生的。目前,SphereEx-Boot 已可能轻松实现对 ShardingSphere-Proxy 进行装置、启动、进行、查看运行状态、卸载等操作。 此外,SphereEx-Boot 可能灵便管控以后集群中的组件和能力。当用户想要运行 ShardingSphere 生态中的任何组件时,只需在 SphereEx-Boot 中执行一行命令即可, 极大地升高了部署和集群治理难度。 在 Apache ShardingSphere 生态体系愈发宏大的背景下,SphereEx-Boot 治理着 Apache ShardingSphere 生态下泛滥的组件,承当着企业生产环境中集群管理工具的角色。 一键式装置为简化装置环节,升高应用门槛,SphereEx-Boot 的装置过程极其简洁,反对一键装置模式;当然,有个性化需要的用户,也可依照本身业务环境来进行自定义装置。 如果你是老手,间接执行文档中提供的命令即可胜利装置 SphereEx-Boot 工具和 ShardingSphere-Proxy 集群,无需做任何命令的批改,具体请参考 SphereEx-Boot 疾速使用手册。如果你对于 ShardingSphere-Proxy 集群和 ZooKeeper 集群有理解和应用过,您能够自定义装置 ShardingSphere-Proxy 和 ZooKeeper,具体请参考 SphereEx-Boot 用户指南。『SphereEx-Boot 文档地址』https://sphere-ex.com/zh/product/boot/quick-start/ 产品劣势SphereEx-Boot V0.1.0 GA 版的上线,简化了操作流程,在肯定水平上不便了用户对于集群的治理,这次要得益于其本身独特的架构劣势。 SphereEx-Boot 逻辑架构图 疾速上手: 通过 SphereEx-Boot 工具,只需执行一行命令就可运行任意 ShardingSphere-Proxy 集群组件。易运维: SphereEx-Boot 工具能够疾速装置,疾速部署 ShardingSphere-Proxy 集群。对 ShardingSphere-Proxy 集群进行相干治理,升高运维老本。易扩大: 提供标准化的程度扩大性能,可通过减少数据服务器的数量随时随地动静地对集群进行扩容。SphereEx 作为以 Apache ShardingSphere 社区为根底所设立的商业化公司,始终在为欠缺社区生态、简化用户操作、升高入门门槛、提供企业级服务而致力。此次 SphereEx-Boot V0.1.0 版本公布,将在很大水平上缓解产品部署步骤繁琐的状况。将来 SphereEx 也将继续推动在利用可视化、简化操作等方面的能力建设,使 Apache ShardingSphere 可能以更亲和的风貌去解决新用户的疑难,升高 Apache ShardingSphere 的应用门槛。 ...

December 30, 2021 · 1 min · jiezi

关于shardingsphere:shardingsphere500beta-SQL异常不打印的问题

最近因为业务须要引入了shardingsphere框架 <!--shardingsphere--><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>5.0.0-beta</version></dependency>引入之后发现SQL谬误日志都不打印了, 例如执行MyBatis insert语句:int result = mapper.batchInsert(entity)因为entity不满足入库要求, 有字段未设置值, 失常会打印异样: java.sql.SQLException: Field 'from' doesn't have a default value然而引入shardingsphere框架后, mapper.batchInsert(entity)失常返回了-1, 没有工作异样日志, 于是DEBUG找到产生异样的地位, 定位到一下代码: ...at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:303)at org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback.execute(JDBCExecutorCallback.java:85)... if (saneResult.isPresent()) { // if始终为true, 因为saneResult必定存在值false或true return saneResult.get();}// 后边的异样日志输入始终没法执行sqlExecutionHook.finishFailure(ex);SQLExecutorExceptionHandler.handleException(ex);return null;解决方案降级到5.0.0 <dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>shardingsphere-jdbc-core</artifactId> <version>5.0.0</version> </dependency>ShardingSpherePreparedStatement类中曾经做了批改: protected Optional<Integer> getSaneResult(SQLStatement sqlStatement) { return Optional.empty(); // 这里返回saneResult.isPresent()始终为false}附debug进去的残缺的异样堆栈(5.0.0-beta版本): java.sql.SQLException: Field 'from' doesn't have a default value at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:370) at com.alibaba.druid.pool.DruidPooledPreparedStatement.execute(DruidPooledPreparedStatement.java:497) at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:307) at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement$2.executeSQL(ShardingSpherePreparedStatement.java:303) at org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback.execute(JDBCExecutorCallback.java:85) at org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback.execute(JDBCExecutorCallback.java:64) at org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine.syncExecute(ExecutorEngine.java:101) at org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine.parallelExecute(ExecutorEngine.java:97) at org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine.execute(ExecutorEngine.java:82) at org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor.execute(JDBCExecutor.java:65) at org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor.execute(JDBCExecutor.java:49) at org.apache.shardingsphere.driver.executor.JDBCLockEngine.doExecute(JDBCLockEngine.java:114) at org.apache.shardingsphere.driver.executor.JDBCLockEngine.execute(JDBCLockEngine.java:91) at org.apache.shardingsphere.driver.executor.DriverJDBCExecutor.execute(DriverJDBCExecutor.java:122) at org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement.execute(ShardingSpherePreparedStatement.java:283) at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:47) at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:74) at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426) at com.sun.proxy.$Proxy106.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:271) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:152) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85) at com.sun.proxy.$Proxy216.batchInsert(Unknown Source) at com.facebook.common.service.BaseService.batchInsert(BaseService.java:159) at com.facebook.common.service.BaseService$$FastClassBySpringCGLIB$$13311683.invoke(<generated>) at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:367) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691) at com.hw.spy.task.services.AdsLibKeywordTaskAdsService$$EnhancerBySpringCGLIB$$23d1258a.batchInsert(<generated>) at com.hw.spy.task.services.AdsLibKeywordTaskAdsSaveService.createTaskByLevels(AdsLibKeywordTaskAdsSaveService.java:114) at com.hw.spy.task.services.AdsLibKeywordTaskAdsSaveService.lambda$createTask$0(AdsLibKeywordTaskAdsSaveService.java:62) at com.facebook.common.utils.log.MDCHelper.tagCallback(MDCHelper.java:114) at com.facebook.common.utils.log.MDCHelper.callback(MDCHelper.java:97) at com.hw.spy.task.services.AdsLibKeywordTaskAdsSaveService.createTask(AdsLibKeywordTaskAdsSaveService.java:45) at com.hw.spy.task.services.AdsLibKeywordTaskAdsService.loadTask(AdsLibKeywordTaskAdsService.java:96) at com.hw.spy.common.service.queue.RedisQueueComponent.lambda$loadDataToQueue$0(RedisQueueComponent.java:77) at com.hw.spy.common.service.queue.OnceExecutionService.run(OnceExecutionService.java:150) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266) at java.util.concurrent.FutureTask.run(FutureTask.java) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at com.facebook.common.utils.NamedThreadFactory.lambda$newThread$0(NamedThreadFactory.java:31) at java.lang.Thread.run(Thread.java:748)

December 29, 2021 · 1 min · jiezi

关于shardingsphere:SphereEx-亮相-openGauss-Summit-2021同云和恩墨签订战略合作协议

2021 年 12 月 28 日,openGauss Summit 2021 在北京望京凯悦酒店正式举办。本次大会是由 openGauss 开源社区发动并举办,以【汇聚数据库翻新力量,逐梦数字时代星辰大海】为主题,会集学术专家、行业用户、合作伙伴、社区贡献者以及数据库畛域爱好者,面向企业外围利用场景的年度开源数据库技术盛会。 Apache ShardingSphere 社区作为 openGauss 社区的官网合作伙伴,受邀参加到了本次大会,现场展现了最新的开源成绩。在大会现场,SphereEx 与 openGauss 商务发行版厂商云和恩墨达成策略协定,单方将在分布式数据库解决方案层面开展单干。 (图:Apache ShardingSphere 开源社区展位) 在下午的【openGauss Summit 2021 云和恩墨分论坛】中,SphereEx 创始人兼 CEO 张亮进行了以【应用 ShardingSphere 打造 openGauss 高性能生态】为主题的相干分享,并与云和恩墨独特签订了策略单干协定,对将来数据库畛域的倒退做出了预测。 (图:SphereEx 创始人 & CEO 张亮) 现场,张亮全面论述了 ShardingSphere 及其核心理念 Database Plus。作为领导 Apache ShardingSphere 倒退的核心理念,Database Plus 通过在碎片化的异构数据库之上构建规范和生态,并叠加扩大更多计算能力,例如:数据分片、弹性伸缩、数据加密等,它使所有利用和数据库之间的交互面向 Database Plus 规范层,从而屏蔽数据库碎片化对下层业务带来的差异化影响,可全面升高企业应用和治理数据库的门槛与老本。 以 Database Plus 理念为领导,Apache ShardingSphere 于目前造成了微内核 & 可插拔架构模型,并在此基础上继续欠缺内核及性能层面的能力,为企业及开发者用户提供更多更灵便的解决方案,以满足在不同场景下的特定需要。 (图:Apache ShardingSphere 性能全景图) ShardingSphere 并不纠结于存算拆散的数据库架构,它联合 Proxy 和 Proxyless 模式。在对 DBA 应用友好度高的场景下,应用 Proxy 能够让用户像应用原生数据库一样应用 ShardingSphere,在对性能有极致要求的状况下,则应用 Proxyless 的模式,以就义小局部侵入性为代价,将性能晋升至极致。用户能够混合应用 Proxy 和 Proxyless 模式,达到友好度和性能兼顾的均衡。 ...

December 29, 2021 · 1 min · jiezi

关于shardingsphere:ShardingSphere-Mode-模式新起航运行模式详解

在 5.0.0 GA 版本中,Apache ShardingSphere 新增了运行模式的概念,同时提供了 Memory/Standalone/Cluster 3 种配置形式。ShardingSphere 为什么会提供这 3 种运行模式,不同的运行模式在理论的开发应用场景中又有哪些不同呢? 本文将率领大家一起理解 ShardingSphere 5.0.0 全新概念-运行模式。 作者介绍孟浩然 SphereEx 高级研发工程师、Apache ShardingSphere PMC。 曾就任于京东科技,负责数据库产品研发,酷爱开源,关注数据库生态,目前专一于 ShardingSphere 数据库中间件开发以及开源社区建设。 分布式治理背景分布式治理是 ShardingSphere 集群部署的根底,在 5.0.0 版本之前,用户须要在配置文件中通过配置 governance 标签来开启分布式治理性能: governance: name: # 治理名称 registryCenter: # 配置核心 type: # 治理长久化类型。如:Zookeeper, etcd serverLists: # 治理服务列表。包含 IP 地址和端口号。多个地址用逗号分隔。如: host1:2181,host2:2181 overwrite: # 本地配置是否笼罩配置核心配置。如果可笼罩,每次启动都以本地配置为准长久化用户配置以及元数据信息是分布式治理最次要的性能之一,也是反对 DistSQL 的根本能力。在 5.0.0 系列的文章中,DistSQL 外围开发人员曾经具体和大家介绍了 DistSQL 的概念、语法和应用,以及如何开发本人的 DistSQL。简略回顾一下,DistSQL 为 ShardingSphere 提供了一种数据库化的应用体验,用户能够应用 SQL 的形式来搭建和治理整个 ShardingSphere 分布式数据库生态体系。 作为一个分布式数据库生态系统的操作语言,和规范的 SQL 一样, DistSQL 须要保障操作的任何配置以及元数据都可能被长久化,以保障系统还原时的数据一致性。而在 5.0.0 版本之前,只有开启分布式治理能力实现这个性能,这也是为什么 DistSQL 在开发初期仅反对分布式治理场景下应用的起因。 ...

December 27, 2021 · 2 min · jiezi

关于shardingsphere:『征文精选』ShardingSphereProxyBase-事务基于-Seata-验证

中文社区征文活动启动一周啦,咱们陆陆续续收到了很多同学的优秀作品,明天为大家举荐其中的一篇,来自【ID:wsm12138】同学的实际心得。 同时欢送更多的小伙伴参加,咱们将继续为大家更新优良文章。 About SEATA 柔性事务【参考】 Seata 柔性事务 — ShardingSphere:https://shardingsphere.apache.org/document/current/cn/reference/transaction/base-transaction-seata/ 服务构建服务布局服务IP备注Sysbench127.0.0.1Version:1.0.20MySQL127.0.0.1Version:5.7.26ShardingSphere-Proxy127.0.0.1GitHub - apache/shardingsphere:https://github.com/apache/shardingsphereSeata127.0.0.1Version:1.4.2ShardingSphere-Proxy 构建配置PROXY 获取【参考】 1、How to Set Up Your DEV Environment: https://shardingsphere.apache.org/community/cn/contribute/establish-project/ 2、Nightly Build: http://117.48.121.24:8080/Proxy/ 3、官网下载:https://shardingsphere.apache.org/document/current/cn/downloads/ CONF 相干SERVER.YAML ######################################################################################################## If you want to configure governance, authorization and proxy properties, please refer to this file.######################################################################################################## mode:# type: Cluster# repository:# type: Zookeeper# props:# namespace: governance_ds# server-lists: localhost:2181# retryIntervalMilliseconds: 500# timeToLiveSeconds: 60# maxRetries: 3# operationTimeoutMilliseconds: 500# overwrite: truerules: - !AUTHORITY users: - root@%:root - sharding@:sharding provider: type: NATIVE#scaling:# blockQueueSize: 10000# workerThread: 40 - !TRANSACTION defaultType: BASE providerType: Seataprops: max-connections-size-per-query: 1 sql-show: true# executor-size: 16 # Infinite by default.# proxy-frontend-flush-threshold: 128 # The default value is 128.# # LOCAL: Proxy will run with LOCAL transaction.# # XA: Proxy will run with XA transaction.# # BASE: Proxy will run with B.A.S.E transaction.# proxy-transaction-type: LOCAL# xa-transaction-manager-type: Atomikos# proxy-opentracing-enabled: false# proxy-hint-enabled: false# sql-show: false# check-table-metadata-enabled: false# lock-wait-timeout-milliseconds: 50000 # The maximum time to wait for a lock# # Proxy backend query fetch size. A larger value may increase the memory usage of ShardingSphere Proxy.# # The default value is -1, which means set the minimum value for different JDBC drivers.# proxy-backend-query-fetch-size: -1CONFIG-SHARDING.YAML ...

December 24, 2021 · 6 min · jiezi

关于shardingsphere:京东白条数据架构进化之路要在数据的不确定性中探索架构的稳定性

京东白条的疾速倒退满足了以后人们日益增长的生产需要。在京东商城上用京东白条来领取,曾经成为一大批用户的生产习惯,更是在某种意义上成为了京东对外的『标签』。而作为一家互联网金融生产平台,京东白条的后盾技术团队更是不容忽视的存在。而其也正是撑持京东白条自 2014 年初上线伊始,至今服务数亿用户的最终本源所在。正是京东白条技术团队多年的致力,才造就了以后京东白条的『土生土长』,但具备京东白条特色的金融级数据库选型方法论。 当京东白条的金融类业务启动时,现任京东白条研发负责人张栋芳,尽管预料到了其数据体量的大幅度增长,却没有想到这种增长将导致数据库选型方面的一系列变动,以及对数据库将来倒退模式的启发。作为京东科技旗下的杀手级金融生产利用,明天的京东白条曾经成长为服务数亿用户、日均产生巨额流量的宏大金融生态。在业务和数据量飞速增长的同时,京东白条后盾的研发人员,也在缓和的焦头烂额中.... 这一点,完满符合了京东白条后盾数据架构的成长过程。 1、技术的保质期:从 MySQL 到 NoSQL 再到 DBRep对于技术人而言,没有永远正确的技术,只有最适宜于当下的技术选型。京东白条业务诞生之初正是互联网金融与生产行业的高速发展期,经验这些年的倒退,从草根走向业余,从强大走向规模,从扩散走向对立,从芜杂走向标准。京东白条的倒退,正是一步步见证了国内互联网生产金融产业的疾速迭代。 同样,京东白条的技术选型历程,也可作为国内互联网生产金融产业倒退过程的一个缩影。 从技术架构的角度来看,并没有相对的好与不好,须要放在彼时的背景下来看,要思考业务的时效价值、团队的规模和能力、环境基础设施等等方面。只有架构演进的生命周期适时匹配好业务的生命周期,能力施展最好的成果。 2014~2015Solr + HBase 的计划解决了外围、非核心业务系统对要害数据库的拜访问题,Solr 作为被检索字段的索引,HBase 用作全量的数据存储。 通过 Solr 集群分担局部读和写的业务,缓解外围库的压力;Solr 扩大体验上欠佳,对业务也存在较大的入侵。2015~2016引入 NoSQL 计划,业务数据以月份进行分表存储在 MongoDB 集群中,阶段性满足了结算解决场景中海量数据导入导出的需要。 查问热点数据效率高,非结构化的存储形式易于批改表构造;仍然面对着扩大差、对业务入侵强的场面,而且耗内存。2016~2017随着业务疾速倒退,数据量冲破百亿大关,此时 MongoDB 面临着容量和性能的双重考验。京东白条大数据平台通过 DBRep 以 MySQL Slave 的模式采集变动信息并存储到音讯核心,最初落盘到 ES 和 HBase 中。 该计划具备较强的数据实时性,扩展性良好;基于业务框架的数据分片难以升高代码保护老本。2、为了让你可能更畅快的剁手,他们先『合成』了本人的后盾架构网购,贵在手速,但也在于钱包的厚度。京东白条的诞生就是为了解决用户钱包的厚度问题。现在,京东白条也打起了“闪电战”。为了保障用户在生产过程中的体验,后盾数据库的稳定性与规律性,就成为了京东白条技术侧亟待思考和均衡的问题。为保障业务零碎在数据激增状况下始终能放弃高效运行,京东白条技术团队在设计初期应用了数据分片数据架构,施展极致性能的同时也兼顾代码的可控性,采纳基于利用框架的数据拆分计划实现了数据拆分工作。 其实说来说去,实质上就是一个问题,即随着产品的降级迭代,晚期的解决方案逐步演变为了妨碍明天后退的绊脚石。通过业务框架实现的数据分片计划导致业务代码复杂度减少、保护老本一直攀升,紧耦合的弊病逐步露出,利用每次降级都须要投入较多的精力对分片做相应调整,研发人员难以专一于业务自身。 于是,解耦成了京东白条技术解围的惟一要害。在京东白条而言,次要从以下这四个方面开始解耦: 数据架构解耦,升高架构之间的耦合度,确保不会因独自业务线变更而导致多个后端架构的调整;技术架构解耦,简化业务系统升级工作所带来的简单研发流程;业务关系解耦,须要让用户在应用过程中每个动作都不受影响,不另外产生新的学习老本,为零碎提供良好的扩大能力,从容应对“618”和“11.11”等平台大促流动;研发流程解耦,解放后端研发生产力,缩小业务代码的复杂度。因后盾数据库与业务之间的耦合度过高,为整个业务的倒退埋下了增速放缓的隐患。面对如上诉求,京东白条技术团队经衡量后开始思考应用成熟的分库分表组件来承当这部分工作,让业务系统升级和架构调整不再简单。但京东白条业务体量微小,是货真价实的金融级高并发、海量数据的业务场景,因而在抉择分库分表组件时应具备以下 4 个特点: 产品成熟稳固。只有成熟且稳固保护的产品,才可能给京东白条这样一款体量的金融产品予以稳定性的保障。应用数据分片来进行架构解耦,自身就是为了确保稳定性;极致性能体现。金融场景下的利用,对于数据响应、实时反馈等性能的要求十分高。尤其在交易这种敏感且非凡的场景下,对于性能的体现,一点也不能马虎;解决海量数据。京东白条须要解决海量的用户数据,尤其在“618”、“11.11”等大促节日下,面对一拥而上海量交易数据与申请,要可能在短时间内疾速解决;架构灵便扩大。业务灵便多变是以后互联网产品的共性。对此,京东白条从多个方面思考自研框架与成熟分库分表中间件 ShardingSphere 优劣性,性能比照图如下: 基于自研框架分片基于 ShardingSphere 分片性能高高代码耦合度高低业务入侵水平高低降级难度高低扩展性个别良好最终,京东白条抉择采纳 Apache ShardingSphere 来进行金融级别的数据库分片工作。 3、场景趋于交融,但数据库却无奈相容:Apache ShardingSphere 解决方案京东白条采纳 Apache ShardingSphere-JDBC 解决方案解决在线利用。ShardingSphere-JDBC 是 Apache ShardingSphere 的第一款产品,它定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额定服务。它应用客户端直连数据库,以 jar 包模式提供服务,无需额定部署和依赖,可了解为增强版的 JDBC 驱动,齐全兼容 JDBC 和各种 ORM 框架。 ...

December 13, 2021 · 1 min · jiezi

关于shardingsphere:打造基于-PostgreSQLopenGauss-的分布式数据库解决方案

在 MySQL ShardingSphere-Proxy 逐步成熟并被宽泛采纳的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Proxy 上继续发力。相比后期的 alpha 与 beta,5.0.0 正式版对 PostgreSQL 的协定实现、SQL 反对度、权限管制等方面进行了大量的欠缺,为后续全面对接 PostgreSQL 生态打下基础。ShardingSphere-Proxy 与 PostgreSQL 的生态对接,让用户可能在 PostgreSQL 数据库的根底上取得如数据分片、读写拆散、影子库、数据加密/脱敏、分布式治理等透明化的增量能力。 除了 PostgreSQL 方面,由华为开源的国产数据库 openGauss 的热度继续攀升。openGauss 具备优良的单机性能,配合 ShardingSphere 的能力和生态,可能打造出笼罩更多场景的国产分布式数据库解决方案。 ShardingSphere PostgreSQL/openGauss Proxy 目前可能反对数据分片、读写拆散、影子库、数据加密/脱敏、分布式治理等 Apache ShardingSphere 生态中大部分能力,在欠缺水平上逐步对齐 ShardingSphere MySQL Proxy。 本文将给大家介绍 ShardingSphere-Proxy 5.0.0 在 PostgreSQL 上所做的晋升以及与 openGauss 的生态对接。 作者介绍吴伟杰 Apache ShardingSphere Committer,SphereEx 中间件工程师。目前专一于 Apache ShardingSphere 及其子项目 ElasticJob 的研发。 ShardingSphere-Proxy 介绍ShardingSphere-Proxy 是 ShardingSphere 生态中的一个接入端,定位为对客户端通明的数据库代理。ShardingSphere Proxy 不局限于 Java,其实现了 MySQL、PostgreSQL 数据库协定,能够应用各种兼容 MySQL / PostgreSQL 协定的客户端连贯并操作数据。 ...

December 3, 2021 · 3 min · jiezi

关于shardingsphere:如何在-ShardingSphere-中开发自己的-DistSQL

在《DistSQL:像数据库一样应用 Apache ShardingSphere》和《SCTL 涅槃新生:投入 RAL 的怀抱》中,曾经为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展现了 DistSQL 创立分布式数据库表的弱小能力,展示了 Apache ShardingSphere 在新形态下的交互体验。 为了让大家对 DistSQL 有更深刻的理解,同时能依据须要定制本人的 DistSQL 语法,本篇将为大家解析 DistSQL 的设计开发流程,同时通过理论的场景案例,率领大家实现一个全新的 DistSQL 语法,实现从需要到设计、开发和测试的残缺过程。 兰城翔SphereEx 中间件研发工程师,Apache ShardingSphere contributor,目前专一于 DistSQL 的设计和研发。 何为 DistSQLDistSQL(Distributed SQL)是 Apache ShardingSphere 特有的操作语言,它与规范 SQL 的应用形式完全一致,用于提供增量性能的 SQL 级别操作能力,以此达到对资源和规定的治理的目标。对于 DistSQL 更多信息参考《DistSQL:像数据库一样应用 Apache ShardingSphere》。 DistSQL 的意义DistSQL 设计的目标是突破中间件和数据库之间的界线,让开发者像应用数据库一样应用 Apache ShardingSphere。 因而 DistSQL 的设计会尽可能符合已有的数据库语法,进而升高学习老本;此外DistSQL 的作用是对资源和规定进行 SQL 级别的治理,齐全代替配置文件也是其长处之一。 开发 DistSQL筹备在开发之前须要对以下工具有所理解 1. ANTRL4 作为解析工具是开发 DistSQL 的根底,对于 ANTLR 4 的应用能够参考 【ANTRL4扼要教程】:https://wizardforcel.gitbooks...在 IntelliJ IDEA 开发时还须要应用到插件 ANTLR v4, (https://plugins.jetbrains.com...)作用是对 ANTRL4 定义的语法规定进行测试,应用形式如下:a. 在对应的规定上抉择 Test Rule ...

December 1, 2021 · 2 min · jiezi

关于shardingsphere:Apache-ShardingSphere-500-内核优化及升级指南

通过近两年工夫的优化和打磨,Apache ShardingSphere 5.0.0 GA 版终于在本月正式公布,相比于 4.1.1 GA 版,5.0.0 GA 版在内核层面进行了大量的优化。首先,基于可插拔架构对内核进行了全面革新,内核中的各个性能能够任意组合并叠加应用。其次,为了晋升 SQL 分布式查问能力,5.0.0 GA 版打造了全新的Federation 执行引擎,来满足用户简单的业务场景。此外,5.0.0 GA 版在内核性能 API 层面也进行了大量优化,旨在升高用户应用这些性能的老本。本文将为大家具体解读 5.0.0 GA 版中的这些重大内核优化,并将比照两个 GA 版本中存在的差别,以典型的数据分片、读写拆散和加解密整合应用的场景为例,帮忙用户更好地了解这些优化并实现版本升级。作者介绍端正强SphereEx 高级中间件开发工程师,Apache ShardingSphere Committer。 2018 年开始接触 Apache ShardingSphere 中间件,曾主导公司外部海量数据的分库分表,有着丰盛的实践经验;酷爱开源,乐于分享,目前专一于 Apache ShardingSphere 内核模块开发。 可拔插架构内核Apache ShardingSphere 5.0.0 GA 版提出了全新的 Database Plus 理念,指标是构建异构数据库下层规范和生态,为用户提供精准化和差异化的能力。Database Plus 具备连贯、增量、可插拔的特点,具体来说,Apache ShardingSphere 可能连贯不同的异构数据库,基于异构数据库的根底服务,提供数据分片、数据加解密及分布式事务等增量性能。另外,通过可插拔平台,Apache ShardingSphere 提供的增量性能可能有限扩大,用户也能够依据需要灵便进行扩大。Database Plus 理念的呈现,使得 ShardingSphere 真正意义上从一个分库分表中间件变质成为一套弱小的分布式数据库生态系统。通过践行 Database Plus 理念,基于可插拔平台提供的扩大点,Apache ShardingSphere 内核也进行了全面地可插拔化革新。下图展现了全新的可插拔架构内核: Apache ShardingSphere 内核流程中的元数据加载、SQL 解析、SQL 路由 、SQL 改写、SQL 执行和后果归并,都提供了丰盛的扩大点,基于这些扩大点,Apache ShardingSphere 默认实现了数据分片、读写拆散、加解密、影子库压测及高可用等性能。 ...

November 26, 2021 · 11 min · jiezi

关于shardingsphere:欢迎-Apache-ShardingSphere-社区海外新晋-Committer

随着 Apache ShardingSphere 社区在海内的影响力逐步扩充,越来越多的海内用户开始留神并参加到 Apache ShardingSphere 及相干生态的建设中来。其中,一位来自斯里兰卡萨巴拉加穆瓦大学的 ThanoshanMV 同学,在 Google 开源之夏(GSoC)流动上与 Apache ShardingSphere 正式结缘,并凭借在 ShardingSphere SQL 解析文件方面的突出贡献,经 Apache ShardingSphere PMC 的提名与审核,于近日正式成为 Apache ShardingSphere 社区的 Committer。 ThanoshanMV 来自于斯里兰卡萨巴拉加穆瓦大学计算机与信息系统业余。科班出身的他,从小就对计算机和编程展现出了浓重的趣味。因缘际会,由 Java 语言编写的 Apache ShardingSphere 我的项目被选为 GSoC 一部分,并吸引到了 ThanoshanMV。 ThanoshanMV 在该届 GSoC 中踊跃配合 Apache ShardingSphere 导师的相干工作,在三位导师的反对下,ThanoshanMV 胜利实现了对于 ShardingSphere SQL 解析引擎下 Oracle DML SQL 定义的校对,并同步更新进了 Apache ShardignSphere 的新版本中,这使 ThanoshanMV 体验到了开源所带来的成就感。因而在流动之后,ThanoshanMV 仍然抉择留在了 Apache ShardingSphere 社区,在 SQL 解析方面为社区继续提供了微小的帮忙与奉献。 Active Contributor在成为社区 Committer 之前,ThanoshanMV 在社区中还有另一个身份,即 Active Contributor。 ...

November 22, 2021 · 1 min · jiezi

关于shardingsphere:HiContributor有一份专属周边礼包等你领取

11 月 10 日,Apache ShardingSphere 5.0.0 正式公布。在版本正式公布之际,为了感激 Contributor 们对社区的奉献,社区为所有的 Contributor 筹备了独家的奖品,欢送大家认证支付! 为了不便验证 Contributor 身份,国内 Contributor 可通过 OpenSEC 进行身份验证,填写邮寄地址,取得周边礼品。 注:因为疫情起因,海内邮寄需视状况而定,海内同学请关注 Twitter【@ShardingSphere】告诉。 01认证流程a. 拜访中文开源社区 OpenSEC:https://community.sphere-ex.com/ b. 注册/登陆账号 c. 点击右上角身份认证按钮 d. 实现信息填写 e. 收到认证胜利邮件 02专属礼包 奖品内容 1 个试轴器钥匙扣2 颗 Apache ShardingSphere Logo 定制键帽1 枚 Apache ShardingSphere 5.0.0 荣誉徽章神秘卡片 线上专属虚构徽章 支付形式 a. 实现 Contributor 认证流程 b. 收到认证胜利邮件,并填写邮寄地址 c. 提交实现后,咱们将在 15 个工作日内将奖品寄出,请留神查收 欢送各位 Contributor 前来支付惊喜! 具体流程可点击链接查看 欢送关注公众号第一工夫理解资讯

November 19, 2021 · 1 min · jiezi

关于shardingsphere:一图看懂-Apache-ShardingSphere-500

November 17, 2021 · 0 min · jiezi

关于shardingsphere:三年沉淀Apache-ShardingSphere-500-开启数据应用新篇章

11 月 10 日,是 Apache ShardingSphere 进入 Apache 基金会的三周年纪念日。在这三年的工夫里,ShardingSphere 社区经验了微小的成长,GitHub Star 数从 5k 增长到了现在的近 15k,贡献者从有余几十人倒退到以后的三百多人,也顺利完成了 3.x、4.x 两次大版本的更新。在这一过程中,ShardingSphere 外围团队始终在思考着将来的倒退路线。通过将近两年工夫的磨合,ShardingSphere 的外围 Team 也响应社区的召唤,于 11 月 10 日这个非凡的日子,将本次 ShardingSphere 5.0.0 正式版作为三周年纪念日的礼物出现给社区及整个分布式数据库和平安生态畛域。作为更新能力最多、更新粒度最细的一次版本迭代,此次 5.0.0 版本使 Apache ShardingSphere 从狭义架构层面到广义性能能力层面,在用户体验层面均带来了数倍的晋升。 SphereEx 视频号 1 Apache ShardingSphere 5.0.0,从工具到生态的演变从 5.0.0 版本开始,Apache ShardingSphere 正式开启了以可插拔架构为外围的全新阶段,实现了由过来数据分片繁多利用场景到当初简单应用环境下综合数据治理的身份转变与能力晋升。在新版本下,Apache ShardingSphere 具备了更多新个性,并领有了更加成熟的大数据解决方案。 随着本次更新对可插拔架构体系的欠缺,标记着 Apache ShardingSphere 在分布式数据库生态畛域的摸索进入到一个全新阶段, 次要能力更新如下: 架构层面,实现内核层、性能层与生态层这三层可插拔架构的构建,并可能通过可插拔形式进行扩大,使所有的性能都可能被叠加应用,不便用户依据本身的业务需要来定制化数据库服务;内核层面,全面晋升了包含 MySQL,PostgreSQL,Oracle 以及 SQLServer 等数据库方言的解析能力,引入查问优化引擎,实现对跨库查问和子查问等这类简单 SQL 的反对;DistSQL,ShardingSphere 在规范 SQL 能力之外提供了一套分布式 SQL,用户能够像应用数据库一样应用规范的 SQL 来治理分布式数据库服务;代理端,欠缺对 PostgreSQL 协定反对,反对 opengGauss 数据库,引入权限零碎,不便用户对数据进行精细化的权限管制等;正式公布弹性迁徙能力,引入子项目 ElasticJob,晋升迁徙作业执行效率,反对代理端批改规定后自动化进行数据迁徙。......我的项目地址:https://github.com/apache/sha... 2 践行 Database Plus 理念,不止是数据分片Database Plus 是指在碎片化的数据库根底服务之上构建规范层和生态层,从而对下层利用提供对立标准化的数据库应用标准,尽可能屏蔽底层数据库差异化带来的业务烦扰。 ...

November 11, 2021 · 1 min · jiezi

关于shardingsphere:Apache-ShardingSphere-在京东白条场景的落地之旅

京东白条应用 Apache ShardingSphere 解决了千亿数据存储和扩容的问题,为大促流动奠定了根底。 2014 年初,“京东白条”作为业内互联网信用领取产品,数据量爆发式的增长,每一次大促备战都是对技术人员的考验,每一次的策略转型驱动着数据架构的成长。 --张栋芳,京东白条研发负责人 京东白条数据架构演进史自 2014 年 2 月京东白条业务上线起,为满足疾速倒退的业务和激增的海量数据,白条的数据架构经验了数次演进。 - 2014~2015 Solr + HBase 的计划解决了外围、非核心业务系统对要害数据库的拜访问题,Solr 作为被检索字段的索引,HBase 用作全量的数据存储。 通过 Solr 集群分担局部读和写的业务,缓解外围库的压力;Solr 扩大体验上欠佳,对业务也存在较大的入侵。- 2015~2016 引入 NoSQL 计划,业务数据以月份进行分表存储在 MongoDB 集群中,阶段性满足了结算解决场景中海量数据导入导出的需要。 查问热点数据效率高,非结构化的存储形式易于批改表构造;仍然面对着扩大差、对业务入侵强的场面,而且耗内存。- 2016~2017 随着业务疾速倒退,数据量冲破百亿大关,此时 MongoDB 面临着容量和性能的双重考验。京东白条大数据平台通过 DBRep 以 MySQL Slave 的模式采集变动信息并存储到音讯核心,最初落盘到 ES 和 HBase 中。 该计划具备较强的数据实时性,扩展性良好;基于业务框架的数据分片难以升高代码保护老本。白条数据架构的演进间接地反馈了互联网生产金融的飞速发展,也阐明了每一种解决方案在不同背景下都有不同的保质期。 火烧眉毛的架构解耦为保障业务零碎在数据激增状况下始终能放弃高效运行,技术团队在设计初期应用了数据分片数据架构,施展极致性能的同时也兼顾代码的可控性,采纳基于利用框架的数据拆分计划实现了数据拆分工作。 但随着产品升级迭代,晚期的解决方案演变成为了眼前的问题,通过业务框架实现的数据分片计划导致业务代码复杂度减少、保护老本一直攀升,紧耦合的弊病暴露无遗,利用每次降级都须要投入较多的精力对分片做相应调整,研发人员难以专一于业务自身。 面对如上问题,技术团队经衡量后开始思考应用成熟的分库分表组件来承当这部分工作,让业务系统升级和架构调整不再简单。基于自研框架分片和基于 ShardingSphere 分片的比照如下: 基于自研框架分片基于 ShardingSphere 分片性能高高代码耦合度高低业务入侵水平高低降级难度高低扩展性个别良好下一阶段工作,解耦。 显然京东白条数据架构将迎来一个新的阶段,解耦的驱动力能够概括如下 3 方面: 聚焦精力:将基于架构的数据库拆分,交给分表组件实现,研发精力需聚焦于业务自身;简化降级:解耦技术架构,简化业务系统升级工作的研发流程;布局将来:为零碎提供良好的扩大能力,从容应对“618”和“11. 11”等流动。京东白条业务体量微小,是货真价实的金融级高并发、海量数据的业务场景,因而分库分表组件应具备以下特点: 产品成熟稳固极致性能体现解决海量数据架构灵便扩大Apache ShardingSphere 解决方案ShardingSphere-JDBC 是 Apache ShardingSphere 的第一款产品,它定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额定服务。它应用客户端直连数据库,以 jar 包模式提供服务,无需额定部署和依赖,可了解为增强版的 JDBC 驱动,齐全兼容 JDBC 和各种 ORM 框架。 ...

October 14, 2021 · 1 min · jiezi

关于shardingsphere:ApacheCon-首次亚洲大会火热来袭SphereEx-邀您共赴年度盛会

ApacheCon 是 Apache 软件基金会(ASF)的官网寰球系列大会。作为久负盛名的开源盛宴,ApacheCon 在开源界备受关注,也是开源静止晚期的出名流动之一。ApacheCon 每年举办一次,为了更好地服务于亚太快速增长的 Apache 用户和贡献者,往年首次针对亚太地区时区的 ApacheCon 在线会议 ApacheCon Asia 大会将于 8 月 6 日至 8 日在线举办。 新晋成立的 SphereEx 往年将以银牌资助的身份参加到此次盛会中,心愿通过与开源界的技术开发者们深刻交换、思维碰撞,传承开源精力,推动开源倒退。 同时,SphereEx 的技术精英们也积极参与到此次盛会中。 SphereEx 创始人张亮将负责中间件专题出品人,联结创始人潘娟将负责 Incubator 专题出品人;SphereEx 高级 Java 工程师孟浩然、中间件工程师吴伟杰将别离在中间件专题带来主题演讲。 上面就请大家来看看 SphereEx 具体带来哪些精彩出现吧! Incubator 专题 专题出品人-潘娟 SphereEx 联结创始人,Apache member,Apache ShardingSphere PMC,Apache BRPC(Incubating)mentor,中国惟一一位女性 Apache Member。 Apache 孵化器即为想要进入 Apache 软件基金会(ASF)的我的项目提供相干帮忙和服务。它帮忙进入的我的项目(称为“podling”)采纳 Apache 的治理格调,并疏导应用 ASF 服务,以成为顶级 ASF 我的项目(“TLPs”)。孵化器创立于 2002 年,截至 2019 年11 月,已帮忙 315 个 podlings,其中 200 多个曾经毕业。 此次 ApacheCon Asia 2021 Incubator 专题将为大家分享无关孵化器的相干教训和领导,包含 Apache 基金会治理和运作的格调、我的项目如何进入 Apache 孵化器并顺利降职成为 Apache 顶级我的项目等。此外,也将带大家学习和理解如何建设成熟、沉闷、多元化的开源社区,以及如何使我的项目倒退更加合乎 Apache 基金会的法律法规、Apache way 等。 ...

July 20, 2021 · 1 min · jiezi

关于shardingsphere:官宣ElasticJob-300-版本正式发布

ElasticJob 是面向互联网生态和海量工作的散布式调度解决方案,由两个互相独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。它通过弹性调度、资源管控、以及作业治理的性能,打造一个实用于互联网场景的散布式调度解决方案,并通过凋谢的架构设计,提供多元化的作业生态。ElasticJob 的各个产品应用对立的作业 API,开发者仅需一次开发,即可随便部署。 在通过 alpha、beta、RC1 版本的打磨后,咱们发表 ElasticJob 3.0.0 版本正式公布!这是 ElasticJob 我的项目自 2020 年 5 月 28 日重启并成为 Apache ShardingSphere 子项目以来的第一个正式版本。 相比 3.0.0-RC1 版本,ElasticJob 3.0.0 正式版优化了以下方面: 破绽修复修复 failover 在分布式部署的状况下可能不失效的问题修复 ReconcileService 在作业敞开后没有正确敞开的问题加强谬误处理器模块-邮件告诉减少 SMTP SSL trust 配置参数依赖调整ElasticJob Spring Boot Starter 模块中的 spring-boot-starter-jdbc 调整为非必须地方仓库:https://search.maven.org/sear... 下载链接:https://shardingsphere.apache... 更新日志:https://github.com/apache/sha... 我的项目地址:https://github.com/apache/sha... 社区建设自 ElasticJob 3.0.0-RC1 公布后,共有 11 位 Contributor 的 26 个 PR 被合并,感激大家的奉献与反对。 相较 ElasticJob 2.x 版本而言,ElasticJob 3.0.0 对内核进行了大量的重构和解耦,并裁减了一系列的生态对接,例如开箱即用的企业微信或钉钉作业出错告诉。后续咱们将对 ElasticJob 3.0.0 进行具体技术文章解读,欢送大家的继续关注! ...

July 7, 2021 · 1 min · jiezi

关于shardingsphere:Spring-Boot-demo系列十三ShardingSphere-MyBatisPlus-分库分表

1 概述本文次要讲述了如何应用ShardingSphere(其中的Sharding-JDBC)和MyBatisPlus进行分库分表,具体步骤包含: 筹备数据库环境筹备依赖编写配置文件测试2 筹备数据库环境2.1 两库六表筹备好两个库: test0test1在两个库中别离建设三个字段一样的表: user0user1user2 字段如下: 这样就筹备了两个库以及其中的六个表了。 2.2 (可选)MyBatis Plus Generator代码生成表因为MyBatis Plus Generator生成的Controller等代码默认是依照表名命名的,这样就会生成相似User0、User0Controller这样的命名,因而这里创立一个叫user的表,仅仅用于代码的生成,外面不会寄存任何的数据: 3 新建我的项目新建Spring Boot我的项目并引入如下依赖: DruidMyBatis Plus starterMyBaits Plus GeneratorVelocity coreShardingSphereYitter(一个雪花id生成器)Maven如下: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.0</version></dependency><dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version></dependency><dependency> <groupId>org.realityforge.org.jetbrains.annotations</groupId> <artifactId>org.jetbrains.annotations</artifactId> <version>1.7.0</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.6</version></dependency><dependency> <groupId>org.apache.shardingsphere</groupId> <artifactId>sharding-jdbc-spring-boot-starter</artifactId> <version>4.1.1</version></dependency><dependency> <groupId>com.github.yitter</groupId> <artifactId>yitter-idgenerator</artifactId> <version>1.0.6</version></dependency>Gradle如下: implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.3.1'implementation 'org.apache.velocity:velocity-engine-core:2.3'implementation 'org.realityforge.org.jetbrains.annotations:org.jetbrains.annotations:1.7.0'implementation 'com.alibaba:druid:1.2.6'implementation 'org.apache.shardingsphere:sharding-jdbc-spring-boot-starter:4.1.1'implementation 'com.github.yitter:yitter-idgenerator:1.0.6'4 配置文件配置文件能够参考ShardingSphere文档,这里给出一个示例配置: spring: datasource: url: jdbc:mysql://127.0.0.1:3306/test # spring 数据源 username: root # 用户名 password: 123456 # 明码 shardingsphere: datasource: names: test0,test1 # 数据源,这里为了不便间接应用库名的名称 test0: type: com.alibaba.druid.pool.DruidDataSource # Druid连接池 url: jdbc:mysql://127.0.0.1:3306/test0 # 连贯test0的url username: root password: 123456 test1: type: com.alibaba.druid.pool.DruidDataSource # Druid连接池 url: jdbc:mysql://127.0.0.1:3306/test1 # 连贯test1的url username: root password: 123456 sharding: default-database-strategy: # 默认分库策略 inline: sharding-column: age # 示意依据age列进行分库 algorithm-expression: test$->{age % 2} # 依据age对2的模进行分库,模为0示意test0库,模为1示意test1库 tables: user: actual-data-nodes: test$->{0..1}.user$->{0..2} # 表的名字,test$->{0..1}能够示意test0、test1两个库 # user$->{0..2}示意user0、user1、user2三个库 table-strategy: # 分表策略 inline: sharding-column: id # 依据哪一列进行分表,id示意依据列名为"id"的列分表 algorithm-expression: user$->{id%3} # 分表规定为id对3取模,id%3为0示意分到user0表 # id%3为1示意分到user1表,id%3为2示意分到user2表 props: sql: show: true # 打印sql这里应用主动取模分片策略,ShardingShphere内置了如下分片算法: ...

July 6, 2021 · 2 min · jiezi

关于shardingsphere:SQL-居然还能在-Apache-ShardingSphere-上实现这些功能

在去年 10 月 5.0.0-alpha 版本公布之后,Apache ShardingSphere 经验了长达 8 个多月的继续开发与优化,终于在 6 月 25 日正式迎来了 5.0.0-beta 版本的公布。本次 5.0.0-beta 版除了提供 DistSQL 这样的新个性外,对 ShardingSphere 内核也进行了加强,次要体现在 SQL 根底解析能力加强、SQL 规范路由能力晋升和 SQL 分布式查问能力加强这三方面。通过这三方面优化,不仅进一步提高了对 MySQL,PostgreSQL,SQLServer 和 Oracle 数据库的根底 SQL 解析能力,而且大幅度提高了对用户 SQL 的反对度,特地针对跨数据库实例的关联 SQL 进行了更有针对性的优化。本文将率领大家一起,探秘 5.0.0-beta 版内核加强个性。端正强Apache ShardingSphere Committer,SphereEx Java 高级工程师。酷爱开源,乐于分享,目前专一于 Apache ShardingSphere 数据库中间件开发。 内核原理在探秘 5.0.0-beta 版内核加强之前,让咱们先来回顾下 ShardingSphere 的内核原理。如下图所示,ShardingSphere 内核次要由解析引擎、路由引擎、改写引擎、Standard 执行引擎、Federate 执行引擎、归并引擎等组成。Federate 执行引擎是本次 5.0.0-beta 版本引入的新性能,用于加强分布式查问能力。 解析引擎:解析引擎负责进行 SQL 解析,具体能够分为词法剖析和语法分析。词法剖析负责将 SQL 语句拆分为一个个不可再分的单词,而后语法分析器对 SQL 进行了解,并最终失去解析上下文。解析上下文包含表、选择项、排序项、分组项、聚合函数、分页信息、查问条件以及可能须要批改的占位符标记;路由引擎:路由引擎依据解析上下文,匹配用户配置的分片策略,并生成路由后果,目前反对分片路由和播送路由;改写引擎:改写引擎负责将 SQL 改写为在实在数据库中能够正确执行的语句,SQL 改写能够分为正确性改写和优化改写;Standard 执行引擎:Standard 执行引擎负责将路由和改写实现之后的实在 SQL 平安且高效地发送到底层数据源执行;Federate 执行引擎:Federate 执行引擎负责解决跨多个数据库实例的分布式查问,底层应用的 Calcite 基于关系代数和 CBO 优化,通过最优执行打算查问出后果;归并引擎:归并引擎负责将从各个数据节点获取的多数据后果集,组合成为一个后果集并正确的返回至申请客户端。在回顾了 ShardingSphere 内核原理后,上面让咱们来具体看看 5.0.0-beta 版内核加强。 ...

June 30, 2021 · 2 min · jiezi

关于shardingsphere:新版发布|ShardingSphere-500beta-来了

Apache ShardingSphere 5.0.0-beta 版在通过长达半年的筹备后,终于将在近期正式 Release! 本文将率领大家一起预览新版本行将带来哪些重大亮点性能。作者介绍 潘娟 | Trista SphereEx 联结创始人 SphereEx co-founder, Apache member, Apache ShardingSphere PMC, Apache brpc(Incubating) mentor, 本次 Release manager。 前京东科技高级 DBA,曾负责京东数科数据库智能平台的设计与研发,现专一于分布式数据库 & 中间件生态及开源畛域。被评为《2020 中国开源先锋人物》,屡次受邀加入数据库 & 架构畛域的相干会议分享。 作为 Apache 的顶级我的项目,ShardingSphere 的 Release 要通过社区验证、投票、公布等环节,保障推出的版本合乎 License 及 Apache Release 标准,且性能及我的项目层面尽可能合乎预期,这是对我的项目自身及使用者的爱护。以后版本已实现根本构建,预计本周内正式发行。 本次 Release 将会带来以下重要个性: 1. 亮点性能全新定义的分布式数据库操作语言—DistSQLSQL 是一种用于存取数据以及查问、更新和治理关系数据库系统的数据库查问和程序设计语言。1986 年 10 月,美国国家标准学会将 SQL 作为关系式数据库管理系统的规范语言。现有通用数据库系统在其实际过程中都对 SQL 标准作了局部改写和裁减,具备更高灵活性和更丰盛的性能,使其实用于本身的数据库系统。 DistSQL(Distributed SQL)是 Apache ShardingSphere 提出的,特有的一种内置 SQL 语言,可能提供规范 SQL 之外的增量性能操作能力。DistSQL 让用户能够像操作数据库一样操作 ShardingSphere,使其从面向开发人员的框架和中间件转变为面向运维人员的基础设施产品。 在 ShardingSphere 中, DistSQL 目前次要划分为 RDL、RQL 和 SCTL 三种具体类型: ...

June 22, 2021 · 2 min · jiezi

关于shardingsphere:SphereEx-公司成立推动-Apache-ShardingSphere-社区加速发展

近日,SphereEx 商业公司在中国红杉种子基金及初心资本助力下,已实现公司及团队组建。各大媒体平台及公众号已相继报道,并抢占新闻头条。作为以 Apache ShardingSphere 外围团队组建、以开源技术为驱动的商业公司,SphereEx 与 ShardingSphere 社区关系如何?ShardingSphere 将来倒退布局如何?置信上述问题,是很多 ShardingSphere 社区成员关注的问题。本文通过采访两位 Apache ShardingSphere 项目管理委员会成员,论述将来社区的倒退及与 SphereEx 如何协同,独特成长。张亮,Apache ShardingSphere VP 及 SphereEx 公司创始人,谈到:Apache ShardingSphere 是社区多年开源的技术积淀,将来将持续做大做强。而于近期成立的公司 SphereEx,名字也正是源自 ShardingSphere,意为 Sphere (生态) + Ex (扩大)。心愿以开源生态为根底,通过开源、凋谢理念丰盛产品能力,打造数字基础设施的新高地。而作为其生态的外围,ShardingSphere 社区将来将持续全力打造沉闷的开源社区,继续高速倒退。SphereEx 则为迫切需要商业反对和服务的企业,提供欠缺的商业闭环,并与其余企业个人建设商业单干。 潘娟,Apache ShardingSphere PMC 及 SphereEx 公司联结创始人,则谈到:SphereEx 作为商业公司的呈现,并不会影响 ShardingSphere 社区的自主倒退,反之商业公司的全力支持将更加推动 ShardingSphere 社区的继续、衰弱、稳固倒退。SphereEx 公司通过更深刻地理解客户及市场,将反哺社区、帮忙 Apache ShardingSphere 更好倒退。同时,也为想要做职业开源的同学提供一份待业抉择。 社区倒退与布局ShardingSphere 于 2016 年开源,历经五年多的倒退,已从轻量级的 Sharding-JDBC 倒退为分布式数据库中间件生态 ShardingSphere。从国内人气的开源我的项目,倒退成为国内上最具影响力的软件基金会 Apache 的顶级我的项目。社区一路走来,一直壮大,感激社区成员的大力支持。SphereEx 的成立,必将助力 ShardingSphere 社区更快、更好、更为衰弱地倒退。Apache ShardingSphere 社区将来将在产品功能性、稳定性、性能测试、文档及应用样例建设等方面投入更多关注。与此同时,流动分享、PMC 及 Committer 的选举、社区间的单干等方面也将作为倒退重点。 Release 布局5.0.0-beta 公布 ➡ 5.0.0 公布 ...

May 25, 2021 · 1 min · jiezi

关于shardingsphere:JOIN-US-SphereEx-精英集结

新环境、新气象,SphereEx 欢送气味相投的你退出!对于 SphereEx北京思斐软件技术有限公司(sphere-ex.com),是一家致力于构建新型分布式数据基础设施的公司,秉承开源、共享、生态、平台理念,致力数据畛域前沿技术翻新。 开创团队成员次要来自 Apache 顶级我的项目「ShardingSphere」,5月14日,公司已取得来自红杉中国种子基金、初心资本的数百万美元天使轮融资。公司主导奉献研发的分布式数据库中间件生态 ShardingSphere 我的项目,具备"平台化、可插拔、云原生"等核心技术特点,是大规模数据利用、数据增值利用的现实解决方案。率先提出的“Database Plus、Database Mesh”理念,旨在晋升企业大规模数据利用程度,更轻松地应答大规模简单数据利用场景。目前已取得生产测试类用户160多家,涵盖互联网、金融、O2O、物流、云计算等多个行业畛域。 为什么退出咱们一、技术当先Apache顶级我的项目ShardingSphere,是最受欢迎的开源我的项目之一公司将来将继续云原生、分布式、DistSQL、异构治理等泛滥前沿畛域发力二、资本方认可行业头部资本领投,代表对公司发展前景的高度认可后续融资打算中三、浓重工程师文化,凋谢平等的气氛来自互联网大厂的精英团队,技术气氛浓重在这里你不是业务的螺丝钉,你的共性值得尊重四、原生开源基因,国际化策略公司崇尚开源精力,拥抱国际化理念在这里你不仅打造技术硬核实力,还能开辟国际化视线五、正规福利待遇,形式多样流动全额社保、公积金,每年两次降职加薪机会员工体检,餐补交通补等多项补贴,将来期权激励等入职装备人体工学座椅,全新MacBook Pro丰盛的水果零食下午茶,便当的健身房,定期团建流动六、回绝996,做高效能人士弹性工作工夫,带薪年假,周末、法定节假日劳动七、舒服的办公环境望京东湖国内核心,将来东二环外围办公区舒服亮堂的办公环境,宽敞凋谢的集体办公空间-待招职位-数据库中间件研发工程师职位形容 1、负责分布式数据库中间件 ShardingSphere 的设计、开发和保护; 2、对 ShardingSphere 的整体架构、扩展性、可用性和性能进行一直优化; 3、解决零碎中的关键问题和技术难题; 4、践行 Apache Way,积极参与开源推广以及社区经营。 任职要求 1、扎实的 Java 开发功底,有丰盛的分布式、IO、并发编程以及数据库应用教训,相熟 Linux 操作系统; 2、代码格调优雅,有代码洁癖,可能践行 ShardingSphere 的开发标准; (https://shardingsphere.apache... 3、积极主动,具备良好的自我驱动能力和责任心,具备良好的团队单干精力和接受压力的能力; 4、相熟 ShardingSphere、理解开源风向、领有 GitHub 沉闷账号、有参加社区与开源教训者优先; 5、具备根本的英语沟通与写作能力。 Golang高级研发工程师(中间件方向) & 云原生研发工程师(中间件方向)职位形容 1、参加公司外围产品云原生数据中间件的研发; 2、继续晋升 Kubernetes 集群的弹性和稳定性,为中间件产品研发保驾护航; 3、开发和保护测试基础设施,提供自动化测试、压力测试和故障注入等能力; 4、建设数据中间件的可观测性,一直剖析和晋升产品性能; 5、编写 CRD 和 Operator 工具,自动化重复性工作; 6、关注业界技术演进,独特摸索将来的技术和方向。 任职要求 1、本科及以上学历,计算机/通信/电子/数学等相干业余,3-5年相干工作教训; 2、酷爱编程,对代码品质和性能有狂热谋求,心愿自动化所有低效的工作; 3、相熟 Linux 常用命令和原理,Linux 下的网络编程,对操作系统有本人的了解; 4、至多相熟一种数据库基本原理,不限于 MySQL/Redis/Mongo/ClickHouse; 5、相熟云原生技术畛域支流技术,如 Docker、Kubernetes、微服务等相干工具和技术; 6、至多纯熟应用一门编程语言,优先 Golang 或 Rust,纯熟应用相干生态工具,对程序性能优化有见解; ...

May 17, 2021 · 1 min · jiezi

关于shardingsphere:SphereEx-获数百万美元天使融资接力-ShardingSphere-开启-Database-Plus-新篇章

5月14日,数据前沿技术畛域初创公司 SphereEx 取得来自红杉中国种子基金、初心资本的数百万美元天使轮融资。SphereEx是一家致力于构建新型分布式数据基础设施的公司,秉承开源、共享、生态、平台理念,致力于数据畛域前沿技术翻新。其研发的分布式中间件ShardingSphere,具备“平台化、可插拔、云原生”等核心技术特点,是大规模数据利用、数据增值利用的现实解决方案。SphereEx的外围开创团队来自Apache顶级我的项目 ShardingSphere、头部互联网公司、及出名基础设施软件提供商。 公司CEO & 创始人张亮示意:“本轮融资将用于组建团队、软件产品化及品牌经营,以打造一个开源、凋谢、翻新的技术型公司。最终将公司建设成为信息翻新行业基石及开源社区靶心。” 作为开源我的项目,ShardingSphere曾经通过5年多的倒退,取得超 13K+ stars的关注,有近 200 余名贡献者,已成为该畛域最受欢迎的我的项目之一。 ShardingSphere 在技术齐备性、和稳定性,以及社区活跃度方面均处于领先地位,在超过 160 家企业的生产环境中应用,涵盖互联网、金融、O2O、物流、云计算等多个畛域,取得了诸多企业级开源用户的认可。 SphereEx将持续保持开源理念,以 ShardingSphere 已积攒的技术生态为外围,打造分布式中间件生态平台。公司名称中的 Sphere+Ex,意为生态+扩大之意。通过其率先提出的 Database Plus 思维,旨在开翻新的数据应用理念,晋升企业数据利用程度,轻松应答简单数据利用场景,并最终造成分布式中间件 PaaS 平台。 Why ShardingSphere?随着企业数字化转型深入,更多数据被企业开掘并应用起来,因而衍生出的数据应用场景也更加多元化。从数据应用广度、应用深度及应用形式来看,数据生产形式正产生着微小的改革并呈现出一些鲜明特点: 数据规模微小,从 GB 、TB 走向 PB 级。传统单体数据库难以承载,因此分布式产品大行其道。数据场景多元,很难通过一两种平台承载全副数据需要;但在企业抉择更多平台时,不仅带来更多老本投入,同时有对数据治理、数据管理、数据开发、数据安全等诸多方面带来的极大挑战与不便。架构层代混合,走过了从单体到集群、从集中式到分布式、从本地部署到云化部署之路。但架构的演进不是代替的关系,新的架构不能齐全取代原有架构。于是,各种架构的产品,在企业外部同时存在,这对企业的应用治理带来极大的困扰。对立架构是必然的抉择,但远非说起来这么容易。技术演进迅速,无论是从倒退、老本,还是平安、自主等需要登程,基础架构降级正在一直减速,但这也同时面临“跑车换轮胎”的经典问题。面临上述问题,如何将底层数据根底平台与下层数据利用解耦,成为各企业数字化转型中的外围痛点。SphereEx 所提倡的 Database Plus (数据库能力加强)、Database Mesh (数据库服务网格)理念,正是旨在提供一种新的思路解决上述问题。遵循这一理念的 ShardingSphere 我的项目,能在较短的工夫内吸引大量的开发者并在泛滥企业中应用,正是这一思维的初步实际。置信在将来,这会带来数据应用上的一场改革。 咱们能做什么?作为 ShardingSphere 开源我的项目背地的商业公司,SphereEx 一方面将秉持凋谢、多元化、共建、链接世界开发者及使用者的理念,推动 Apache ShardingSphere 开源社区稳固、高速、沉闷的倒退;另一方面将提供商业服务反对及更合乎场景需要的企业解决方案。继续打造以分布式数据库中间件生态圈为外围,提供包含但不限于分库分表、读写拆散、脱敏加密、数据网关、分布式事务、分布式治理、异构数据平台等能力,并将上述能力数据库原生+云原生形式输入;心愿最终将 ShardingSphere 倒退成为世界级的明星开源我的项目及数据应用的新规范。 外围劣势ShardingSphere 自 2016 年开始经营以来,吸引了大量的开发者,并在泛滥企业应用中积攒丰盛场景实际。其原生的开源模式,具备很强的网络效应,先发劣势非常明显。 从技术自身来看,ShardingSphere 通过了大规模线上环境验证。无论是其晚期脱胎于当当基础架构平台,还是在京东被定为金融级分布式数据库的外围组件,其都经验了大型电商平台的简单环境应用。在内部有超过 160 家企业客户,包含建行、民生银行、中国电信翼领取(甜橙金融)、京东、当当、百度、爱奇艺、腾讯音乐、中通快递、韵达速递、闪送、携程、58、好将来、科大讯飞、海康威视、OPPO、VIVO、现实汽车、Keep 等泛滥用户在生产环境中应用。专家访谈中专家也对 ShardingSphere 产品和团队的能力示意认可。 京东科技高级总监郑灏示意:“在数据开源生态中 ShardingSphere 始终秉承自主凋谢的理念,已成为泛滥企业首选的数据技术产品,同样在京东 ShardingSphere 有着丰盛的利用场景,基于对需要的了解,张亮和团队推动着数据生态在行业的倒退,咱们期待 ShardingSphere 在更多的生产场景落地,同时帮忙企业在数字化转型过程中自主可控地把握本人的数据和服务。” 中国电信天翼数智科技有限公司副总经理张小虎示意:“咱们公司关注这个团队和它的产品线很久了。咱们本身的业务倒退离不开这样优良团队的撑持,特地在解决行业关键问题上,这个团队以及他们产品的解决思路和解决方案更合乎咱们印象中对行业技术将来倒退的预期和方向。因而,在将来,我心愿更多地与他们开展更严密的单干,特地在产品方面。” ...

May 14, 2021 · 1 min · jiezi