[복각 상기 데이터베이스 미들웨어에 대한 생각

저자 : kimmking
링크 : HTTPS : //www.zhihu.com/question/352256403/answer/878523206
소스 : 거의 아는
저자가 저작권을 소유 한. 상업 무단 전재 저자 권한은 비상업적 무단 전재 소스를 표시하시기 바랍니다 문의하시기 바랍니다.

메인 타이틀, 축하합니다, 당신은 오픈 소스 매니아 기술자 + 데이터 미들웨어로, 주님의 주제에 대한 몇 가지 질문에 대답하려고 깊이 중요한 문제의 수를 생각한다 :

  1. 나는 데이터 미들웨어를 필요로 할 때, 미들웨어는 할 수
  2. 데이터 미들웨어의 원리, 오픈 소스 미들웨어 데이터
  3. 왜 국내 오픈 소스, 주로 업데이트 중지
  4. 어떤 데이터 미들웨어를 사용하는 것이 좋습니다, 장점은 무엇인가

당신이 데이터 미들웨어를 필요로 할 때 첫째, 미들웨어 수행 할 수 있습니다

제목처럼 주님은 사업 개발로, MySQL은, 오라클 데이터베이스 테이블 (일반적으로 단순하게 간주되어 나타납니다, 일년이 후, 2 백만 또는 테이블의 기록의 수십억 성장했다 표는 더 복잡 할 때, 배의 수천만의 MySQL의 수백만 배의 수백만의 오라클 수십, 이번에는 복잡한 쿼리에 천천히, 천천히 삽입 결과 및 데이터를 수정할 수) 복잡한 쿼리 또는 변경 성능 문제가있을 것입니다 , DDL 실행이 너무 너무 느린 수정 또는 인덱스에 추가하거나 필드를 추가 할 수없는 테이블 열 유형을 수정하는 리드하고있다. 그것을 어떻게? 이 시간 우리는 몇 가지 방법을했다 :

  • 역사 테이블 : 밖으로 분할 시간 이력 테이블, 데이터의 양을 줄이고, 이전보다 일반적인 사실, 분할 수준의 특별한 종류, 사업 방해입니다
  • 수직 분할 : 칼럼, 레코드의 수를 감소시키지 않고, 열 테이블 (레코드 당 데이터, 즉 소량)의 넓은 테이블 컬럼 수백의 복수로 분할하지만, 전체 테이블과 인덱스 크기의 데이터 량을 줄이기
  • 분할 레벨 하나 또는 열의 해시 값의 일부에 의해이 균일 따라서 직접적 분할로서, 하나 개의 데이터베이스 단일 테이블에서 데이터의 양을 줄이고, 데이터 라이브러리와 같은 테이블의 복수의 분할 1024 하위 테이블로 나누어 져 있습니다, 그것은 하나의 테이블에 복잡한 작업은 매우 빨리 할 수있는 일, 하나의 테이블에 지금 크기의 세 가지 주문, 원래 일억 테이블, 100,000 단일 테이블의 데이터를 데이터의 양을 줄일 수 있습니다. 원래 SQL1은 : 사용자가 SELECT * FROM UID 지금 = 1025,과가있는 곳의 단점은 원래는 테이블 UID로 나눈 당신은 사용자 테이블과 같이 작동하기 전에 지금 테이블에서 작동하기 위해 알아야 할 테이블을 운영 할 필요가 있다는 것입니다 UID = 1025, 또한 사업의 침입 유형에 보이는 곳 users_0001 SELECT * FROM : UID를 알고 다음 1024 == 1, SQL은 SQL2된다 1,025퍼센트을 알고, 1025입니다. 사업 미들웨어를 필요로하는, 투명하게 할 수있는 방법, 너무 많이하지 수정에 관계없이 분할 테이블입니다 비슷한 코드의 수를 분할, 도서관에 관계없이, 점을, 우리가 SQL1 자동 SQL2 될 넣어 도움 .
  • 별도의 읽기 및 쓰기 : MySQL과의 TPS / QPS 등 우리가 특히 읽기, 덜 쓰고,이 네 가지 예는 압력의 일부를 공유 할 수 있기를 바랍니다, 이미 높은, 그리고 수천 수천, 주에서 3 번을하고있다 압력 모든 사람의 읽기 동등 경우 경우, 당신은 기본 라이브러리를 얻기 위해, 읽기, 쓰기 및 관심있는 중앙 도서관의 압력을 줄일 수 있습니다. 이 시간도 다른 라이브러리로 라우팅 미들웨어 데이터 요청이 필요합니다.

필요에 우리의 사업은 하나의 데이터베이스 단일 테이블의 압력을 감소 시키거나 별도의 대형 R & D 팀을 읽고 쓸 수 있지만하지 않는 경우, 기술 축적이 조각이 주요 문제로, 일부 중간층 문제를 얻기 위해 자신의 코드를 개발하는 것만으로는 충분하지 않습니다 소유 마찬가지로, 우리는 미들웨어 데이터의 도입을 고려해야합니다. 왜 오픈 소스 미들웨어 데이터의 국내 큰 분야이며, 데이터의 양이 충분히 작은 회사가 아니거나 기술이 간단한 장면을 사용하는 경우, 나중에 자신의 미들웨어, 최대의 양을 개발 할 필요가 없습니다, 충분하지 않다, 오픈 소스 기술의 사용은 가장 경제적 인 솔루션입니다. 대기업 데이터 미들웨어를 얻을 수있는 능력을 가지고 우리는 분산 데이터베이스에 종사하는, 우리는 지금 분산, 말을 기본 응답이 하듯이, 특히 최근 몇 년 동안, 안쪽에서 바깥 오픈 소스의 일부임을 알고 데이터베이스의 최대 용량은 기존의 관계형 데이터베이스 MySQL은 / ​​오라클보다 훨씬 큰 데이터베이스에 기능 미들웨어 치료의 일부로 간주 될 수 있으며,이 회사는이 문제에 대해 덜 우려하고있다. 반면에, 일부 데이터 미들웨어 클라우드 시스템으로, 폐쇄 원 내부의 RDS의 일부가된다.

둘째, 데이터 미들웨어의 원칙의 실현, 어떤 오픈 소스 미들웨어 데이터

간단하게 두 가지 원칙이있다, 넣어 :

  • JDBC 클라이언트 모드 : 미들웨어 라이브러리 항아리 패키지 또는 등, 예를 들면, 오직 직접 프로젝트에서 참조하는 개략적 도면, 즉 포장 JDBC 데이터 소스의 중간층으로 규칙 구성된 서브 라이브러리 서브 테이블 각 시간, 통화 시간, JDBC 래퍼 클래스가 자동으로 좋은 SQL 교체 한 다음 작업을 완료하기 위해, 실제 JDBC와 SQL을 호출합니다. 직접 운영자 테이블을 필요로하므로 SQL에 대한 몇 가지 제한이있을 것이다 단일 라이브러리 이후 및 그러나, 결정된 서브 라이브러리 하위 테이블 조건을 가져와야한다, 중합 너무 복잡한 작업을 할 수 없습니다.
  • 프록시 프록시 모드 :

다음 그림에서 초기 주류 오픈 소스 미들웨어 :

:에서 인용

  1. 코바는 : 알리바바 B2B (기업 간 전자 상거래)는 거의 3000 MySQL의 인스턴스의 관리를 관계형 분산 시스템을 개발한다. 알리 오프로 인해 코바 저자 뒤에있는 이유가 유지되지 않은, 알리도 대안 코바 TDDL 개발, 테스트를 버텨.
  2. MyCAT:社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存 在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活 跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比 较高,也会一直维护下去,
  3. OneProxy:数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方 的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件, 楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在 高并发下很稳定。
  4. Vitess:这个中间件是Youtube生产在使用的,但是架构很复杂。 与以往中间件不同,使用Vitess应用改动比较大要 使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。
  5. Kingshard:Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间 用go语言开发的,目前参与开发的人员有3个左右, 目前来看还不是成熟可以使用的产品,需要在不断完善。
  6. Atlas:360团队基于mysql proxy 把lua用C改写。原有版本是支持分表, 目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并 发下会经常挂掉,如果大家要使用需要提前做好测试。
  7. MaxScale与MySQL Route:这两个中间件都算是官方的吧,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。MySQL Route是现在MySQL 官方Oracle公司发布出来的一个中间件。
  8. ShardingSphere,后起之秀,源于当当网架构部的ShardingJDBC框架。

上面都是提到了分布分表和读写分离的中间件,其实还有一些专注于分布式事务的、数据复制传输的等等,比如fescar,canal、outter等等。

其实淘宝早期开源了TDDL,淘宝分布式数据中间层,但是只开源了客户端jdbc模式,没有开源proxy代理模式。

三、为什么都是国内开源的,并且大都停止了更新

国内的开源,部分是大公司主导的技术影响力输出,部分是个人的兴趣之作贡献给社区,总而言之是没有直接的显著回报的。也就是说,这一块一直没有一个稳定可行的商业模式来支持,所以一直以来,大公司实际上也看不上,因为赚不了钱,而没有回报的事情就无法长久,所以自然就停止了更新。对于个别有云服务的公司,这一块技术发展好了,其实可以并到云里提供数据服务,或者进一步的发展成为分布式数据库,这样可以变现了,那就闭源,所以,现在活跃的开源数据中间件,已经不多了,下面就推荐一个活跃的项目。

四、推荐使用什么数据中间件--ShardingSphere

推荐使用近期加入Apache基金会的第一款数据中间件,也是国人开发的,ShardingSphere项目。可以直接在这个项目的github commits记录看到,非常活跃,每天都有提交记录,issue也一直在持续维护。为什么还活得这么好呢?因为有张亮团队的专职在开发、维护和推广。

详细文档和代码参见:

ShardingSphere​shardingsphere.apache.org图标 apache/incubator-shardingsphere​github.com图标

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。

ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它与NoSQL和NewSQL是并存而非互斥的关系。NoSQL和NewSQL作为新技术探索的前沿,放眼未来,拥抱变化,是非常值得推荐的。反之,也可以用另一种思路看待问题,放眼未来,关注不变的东西,进而抓住事物本质。 关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。

稍后我推荐ShardingSphere项目的两个主要PMC,@张亮 和 @曹昊,来关注一下这个问题。

추천

출처www.cnblogs.com/jinanxiaolaohu/p/11801885.html