1 Star 2 Fork 1

Suzzt / dao-cloud

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

项目介绍

DaoCloud通过SpringBoot构建基于netty开发轻量级的微服务框架.麻雀虽小,五脏俱全(完全自研开发且完全开源,放心使用); 本项目追求轻量、易接入、自定义协议、高可用、高性能、高扩展、易上手等特性; 致力于简化应用程序之间的RPC调用,并为应用程序提供方便、无代码入侵、稳定和高效的点对点远程微服务调用解决方案。对于开发人员来说,dao-cloud的提供了丰富的模型抽象和可扩展接口,为求一站式解决微服务带来的系统架构复杂度,包括网关路由、负载平衡、故障转移、性能监控、微服务治理等;

系统架构

dao-cloud(v2) 组件架构

整个系统不严格重度依赖任何中间价组件即可启动,只需要一个操作系统依赖!
1.注册中心与配置中心都是center来提供能力,两者是一体化集成的
2.这里服务与center、provider与comsumer都是长连接的提供高可用的方案,这里的心跳检测存活分为两种,一种是重心跳,一种轻量级单向交互的心跳(该单向并不是指只有一方发送心跳!)
3.服务间设计由于有长连接的存在,因此center宕机对现有服务间的调用没有影响,但是对配置中心的回调有一定程度的通知失败
4.组件服务都有高可用是采用多节点保证的,高性能是采用最轻化的协议、同通道复用保证的。能保证整个微服务始终在一定程度下提供能力,不保证一些场景下的一致性

center集群架构

dao-center-cluster

首先center cluster一个同步节点复制、相互独立去中心化的集群方案!建议center cluster数不要超过100个节点
1.center集群之间: center节点交互通过重心跳维持集群,加入或宕机在center中相互同步节点数据,节点失效时会将未收到心跳回应的对应节点设置为暂时失效节点,心跳逻辑维持,一直到有响应返回变正常节点
2.center与服务连接: 服务节点端通过拉取存活集群节点来轮询注册一个节点,一旦重试失败,换下一个存活节点,继续一直向center发送重心跳(即一直注册)
3.center与服务负载: center cluster节点加入或宕机时,center会自主发送协调server负载情况
4.center与服务数据: 通过心跳channel发送数据(config、server-info、gateway)同步,这里采用异步发送,并要求响应返回结果,在失败情况下会一定的重试,并做了幂等
注意: 在加入集群时,启动时会清空掉自己所有的配置,所以你需要自行判断center的version新旧。

网关设计架构

网关设计

项目结构

dao-cloud-core = 核心
dao-cloud-center = 注册+配置-中心(jar)
dao-cloud-gateway = 网关(jar)
dao-cloud-spring-boot-starter = 自动装配(jar)
dao-cloud-example = 使用示例

dao-cloud提供了什么能力?

1. rpc服务调用

提供服务之间的RPC调用能力,在轻量dao协议(tcp)下,降低你每次服务间调用的代价

2. 服务注册管理

帮助rpc服务发现和服务运行状况检查,使服务注册自己与发现其他服务变得简单。还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送请求

3. 动态配置管理

服务中的配置允许您在动态变更的方式下异步通知订阅服务。还支持动态变更配置后回调订阅服务中的监听事件

4. 服务监控与链路追踪(todo)

监控服务负载流量压力,追踪各服务间调用的完整链路,归置日志统一收集输出打印,让你知道每个节点性能消耗情况

5. 高性能高可用center集群(服务注册中心、配置中心、网关服务中心)

为微服务提供了自身的高可用、高性能、合并愈合以及更简单的集群恢复能力

6. 统一网关

提供请求的鉴权、限流等能力,整合服务入口的统一

dao-协议

+---------+---------+--------------+----------------+----------------+----------------+
|  magic  | version | message type | serialize type |   data length  |  data content  |
| 3(byte) | 1(byte) |    1(byte)   |     1(byte)    |     4(byte)    |      ~ ~       |
+---------+---------+--------------+----------------+----------------+----------------+
version: 暂时没用到
serialize type 支持: jdk(DTO请实现序列化接口)、json、hessian(推荐默认)

快速开始

dao-cloud-index

无需任何配置(追求轻量).所有功能组件都是通过SpringBoot自动装配一键化启动(引入启动依赖jar包)

<dependency>
    <groupId>org.dao</groupId>
    <artifactId>dao-cloud-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

rpc注解用法说明(其实用法与dubbo、spring-cloud、sofa这些差不多一致)

每个provider一定要设置自己的proxy名字! 确定唯一接口: proxy+provider+version
@DaoService = 用于服务注册    provider:暴露服务的provider名称, version:发布版本, serialize:序列化选择
@DaoReference = 用于服务注入  provider:暴露服务的provider名称, version:发布版本, serialize:序列化选择, loadbanalce:负载路由选择, timeout:超时时间

注册|配置中心(引入dao-cloud-center的pom依赖jar包)

<dependency>
    <groupId>org.dao</groupId>
    <artifactId>dao-cloud-center</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
通过注解EnableDaoCloudCenter标注在一个SpringBoot工程的启动类上,告诉这是dao-cloud的注册|配置中心(这里内嵌一个web页面)

DaoConfig这个类提供了服务对配置信息的获取、订阅(详情看dao-cloud-example示例)
    DaoConfig.getConf  ==== 获取配置
    DaoConfig.subscribe  ==== 订阅配置,在监听到订阅的配置发生变化时,做某些事(回调)
    注意: 此外你在配置中心更改配置后,配置中心会自动刷新到服务上

服务注册管理 dao-cloud-registry

配置中心管理 dao-cloud-config

项目(dao-cloud-example)中有一个示例

0.把公共的接口请放在api-common中,就是你要暴露出去的函数方法
1.先启动web工程(通过@EnableDaoCloudCenter注解搞定注册中心).你可以访问 http://127.0.0.1:5555/dao-cloud/index 来打开页面管控整个页面(用户名:admin,密码:123456)
2.然后就是provider与consumer,项目中提供了工程(dao-cloud-example)来示例使用
先启动provider,再启动consumer(其实启反也可以)
3.验证! http://127.0.0.1:19998/dao-cloud-example-consumer/demo (rpc调用测试)
还有其他test-demo也都放在工程dao-cloud-example中

本项目是由作者利用平时自由时间创建或迭代,感谢jetbrains 提供的license。所有的微服务异常情况没办法测试全,未在真实项目上实践过!请酌情考虑使用,出事故拒不负责(^_^)! 有问题请提issues;

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

DaoCloud通过SpringBoot构建基于netty开发轻量级的微服务框架.麻雀虽小,五脏俱全(完全自研开发且完全开源,放心使用); 本项目追求轻量、易接入、自定义协议、高可用、高性能、高扩展、易上手等特性; 致力于简化应用程序之间的RPC调用,并为应用程序提供方便、无代码入侵、稳定和高效的点对点远程微服务调用解决方案。对于开发人员来说,dao-cloud的提供了丰富的模型抽象和可扩展接口, 展开 收起
Java 等 4 种语言
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/Suzzt0/dao-cloud.git
git@gitee.com:Suzzt0/dao-cloud.git
Suzzt0
dao-cloud
dao-cloud
master

搜索帮助