前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >hydra-microservice 中文手册(上篇)

hydra-microservice 中文手册(上篇)

作者头像
为少
发布2021-05-27 19:05:38
2.2K0
发布2021-05-27 19:05:38
举报
文章被收录于专栏:黑客下午茶黑客下午茶

Hydras 是什么?

Hydra 是一个 NodeJS 包(技术栈不是重点,思想!思想!思想!),它有助于构建分布式应用程序,比如微服务。

Hydra 提供服务发现(service discovery)、分布式消息传递(distributed messaging)、 消息负载平衡(message load balancing)、日志记录(logging)、呈现(presence)和运行状况(health)监视等功能。Hydra 利用 Redis 的强大力量做到了这一点。

例如,使用 HydrasendMessagemakeAPIRequest 调用, 一个应用程序可以按名称与其他应用程序通信,而无需指定 IP 或端口信息。

在运行命名服务的多个实例的常见用例中, Hydra 将根据可用实例的存在信息对其请求进行负载平衡。如果目标实例没有响应,Hydra 甚至会重新路由请求。

Hydra 项目为 ExpressJS 开发人员提供了 hydra-express 模块。Hydra-express API 路由可以自动注册并提供给 Hydra 项目的 hydra-router service, 它是一种 service 感知的 API 和消息传递路由器。Hydra-router 甚至将接受 WebSocket 消息并将其路由到其相应的服务。

为什么要用 Hydra?

Hydra 提供的大部分功能都可以通过组合使用其他库、框架和基础设施工具来实现。那么,为什么要用 Hydra 呢?

我们创建 Hydra 的目标是创建一个单一的、轻量级的 NPM 包,它为微服务提供解决方案, 而不会迫使开发人员以不同的方式来构建微服务。在很大程度上,我们想让熟悉 ExpressJS 的开发者也能使用 Hydra。另一个目标是,我们相信开发人员不必是 DevOps 专业人员才能开始使用微服务。简而言之,Hydra 降低了构建和部署微服务的门槛。

Hydra 与 Redis

Hydra 项目的主要目标是在不牺牲健壮性和可伸缩性的情况下, 降低构建和部署可伸缩 Node 微服务的障碍。作为轻量级的库,hydra-core 已在从小型 IoT 设备到 Dockerized 云基础架构的各种情况下使用。

Hydra 利用 Redis 的强大功能来解决以下微服务问题:

  • 存在(presence)和健康(health)监测
  • 服务发现(service discovery
  • 路由发现(route discovery
  • 服务间消息传递(inter-service messaging

让我们检查每一个关注点。

存活状态(presence)和健康(health)监测

微服务需要传达其存在状态,以便可以对其进行监视并通过网络与之可靠地进行通信。将消息发送到不正常的服务可能会导致级联的结果,具体取决于应用程序体系结构的健壮性。

应用程序需要在调用它们之前了解对等微服务的状态。这样路由软件可以避免不健康的服务,并在问题致命之前将其报告出来。

使用 Hydra 的微服务将其状态和运行状况存储在 Redis 中, 该信息可供对等服务和监视代理使用。

服务发现(service discovery

分布式应用程序通过相互发送消息来协同工作。大多数情况下,这些消息采用 HTTP Restful API 的形式。另一种常见的方法是基于套接字(socket-based)的消息传递。

为了彼此合作,应用程序需要知道对等服务的位置。也就是说,他们需要知道目标 IP 和端口地址。使用 DNS 条目或反向代理服务器(例如 Nginx )可以部分解决此问题。但是,这种方法的缺点是这些解决方案需要管理。意思是,没有自动或动态发现发生。

由 Hydra 提供支持的服务可以使用 Redis 注册其服务名称(service name),IP地址和端口。结合注册和服务存在信息,可以使对等服务彼此发现。

路由发现(route discovery

使用 Hydra 的应用程序可以注册其 Restful API 路由,以便对等应用程序可以发现它们。 Hydra-Router 是一种动态且可感知服务的路由器, 它使用存储的路由信息将外部请求定向到云或集群环境中的服务。

服务间消息传递(inter-service messaging

Redis 提供消息传递服务,以允许应用程序发布和订阅消息。这种通信是基于套接字的(socket-based),并且性能很高。Hydra 在 Redis 消息传递之上添加了一层, 以通过发送包含路由信息(例如命名服务 named services)的JSON消息,使应用程序彼此通信。您无需考虑IP地址或端口,也无需考虑哪个服务实例将收到消息。

Redis 的灵活性

Redis 是理想的,其原因有很多,Redis 在开发人员中的受欢迎程度持续上升。在在线民意调查中,它的排名也很高。

Redis 可能已经在您的环境中,因为它通常是智能缓存的首选解决方案。

在 Redis 之上构建 Hydra 的一个关键原因是因为 Redis 可在 IoT 设备, 笔记本电脑,云基础架构上使用,并受到 RedisLabs 等托管环境的良好支持。这确实使开发人员能够将 Node 微服务构建和部署到任何这些环境。

Hydra Express-快速教程

Hydra 是一个 NPM 模块,用于快速构建 Node-based 的微服务。Hydra-express 是包装 Hydra 和 ExpressJS 的模块。在本指南中,我们将着眼于创建一个 hydra-express 应用程序,并了解它可以做什么。

第 1 步-获取 Redis

Hydra 需要使用 Redis 服务器。如果您从未使用过 Redis,我们认为这将是一次改变生活的开发人员经验, 希望这是最终尝试它的一个很好的理由!

如果您已经在使用 Redis,那么恭喜您已经升级了,请随时跳至第2步!

有很多方法可以访问 Redis 服务器。最简单的方法之一是通过 RedisLabs 等提供商注册免费套餐。

如果你喜欢 Docker,你可以在几分钟内安装官方的 Redis 镜像。对于 PC 用户来说,这也是一个不错的选择。

在 Mac 上,您可以使用一个简单的命令通过 Homebrew 安装Redis:brew install redis

如果您不介意从源代码构建 Redis,请查看《Redis快速入门指南》

但最简单的方法是第一种选择,它不需要安装——只需登录免费的云服务提供商。

这里强烈建议使用 Docker

第 2 步-Hyda CLI 工具

有了 Redis 的访问权限,您现在应该安装 hydra 工具:

确保您使用的是 NodeJS 6.2.1 或更高版本-Hydra 是使用 ES6 构建的!

sudo npm install -g yo generator-fwsp-hydra hydra-cli

这样就安装了方便的 Yeoman 和 hydra 生成器以及命令行客户端。

让我们配置Hydra命令行客户端。

$ hydra-cli config
redisUrl: 127.0.0.1
redisPort: 6379
redisDb: 15

上面的例子假设你已经在本地安装了 redis。如果没有,只需提供云服务提供的 redisUrlredisDb 即可。

现在我们都准备好了。让我们构建一个微服务!

第 3 步-构建和测试微服务

让我们构建一个名为 hello的服务。我们将使用方便的 Hydra生成器,大多数情况下选择默认设置。

$ yo fwsp-hydra
? Name of the service (`-service` will be appended automatically) hello
? Host the service runs on? 
? Port the service runs on? 0
? What does this service do? Says hello
? Does this service need auth? No
? Is this a hydra-express service? Yes
? Set up a view engine? No
? Enable CORS on serverResponses? No
? Run npm install? No
   create hello-service/.editorconfig
   create hello-service/.eslintrc
   create hello-service/.gitattributes
   create hello-service/.nvmrc
   create hello-service/.jscsrc
   create hello-service/specs/test.js
   create hello-service/specs/helpers/chai.js
   create hello-service/.gitignore
   create hello-service/package.json
   create hello-service/README.md
   create hello-service/hello-service.js
   create hello-service/config/sample-config.json
   create hello-service/config/config.json
   create hello-service/routes/hello-v1-routes.js

Done!
'cd hello-service' then 'npm install' and 'npm start'

这是创建的:

.
├── README.md
├── config
│   ├── config.json
│   └── sample-config.json
├── hello-service.js
├── node_modules
├── package.json
├── routes
│   └── hello-v1-routes.js
└── specs
    ├── helpers
    └── test.js

编辑 routes/hello-v1-routes.js,使事情变得更有趣。

将第18行更改为:

result: {}

到:

result: {
  msg: `${hydra.getServiceName()} - ${hydra.getInstanceID()}`
}

按照上述说明,我们可以继续构建我们的服务。

$ cd hello-service
$ npm install
$ npm start

启动服务后,我们看到它使用随机端口启动。

serviceInfo { serviceName: 'hello-service',
  serviceIP: '10.1.1.163',
  servicePort: 8891 }

您可以通过 curl 访问该服务:

$ curl 10.1.1.163:8891/v1/hello
{"statusCode":200,"statusMessage":"OK","statusDescription":"Request succeeded without error","result":{"msg":"hello-service - 50bf4346dd492c2036cfd57ad8bd2844"}}

或通过浏览器:http://10.1.1.163:8891/v1/hello

我们还可以使用已安装的 hydrai-cli app 获取有关我们服务的信息:

$ hydra-cli nodes
[
  {
    "serviceName": "hello-service",
    "serviceDescription": "Says hello",
    "version": "0.0.1",
    "instanceID": "b1554f404acc3268c1511dc84ae43c50",
    "updatedOn": "2016-11-15T18:18:56.438Z",
    "processID": 20542,
    "ip": "10.1.1.163",
    "port": 8891,
    "elapsed": 4
  }
]
{
  "hello-service": [
    "[GET]/_config/hello-service",
    "[get]/v1/hello/"
  ]
}

此信息由我们的服务发出,它使服务可以彼此发现并相互发送消息。与 Hydra-Router 结合使用,您可以构建整个微服务网络。

要了解如何使用新的微服务,请参见 Hydra 方法。

推荐的后续步骤

  • 使用 hydra 生成器创建您自己的测试项目
  • 查看示例演示项目
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑客下午茶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Hydras 是什么?
  • 为什么要用 Hydra?
  • Hydra 与 Redis
    • 存活状态(presence)和健康(health)监测
      • 服务发现(service discovery)
        • 路由发现(route discovery)
          • 服务间消息传递(inter-service messaging)
            • Redis 的灵活性
            • Hydra Express-快速教程
              • 第 1 步-获取 Redis
                • 第 2 步-Hyda CLI 工具
                  • 第 3 步-构建和测试微服务
                    • 推荐的后续步骤
                    相关产品与服务
                    云数据库 Redis
                    腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档