基于Java的微服务架构源码案例Abixen

17-04-26 banq
微服务越来越受欢迎,每个月都有更多的库包和解决方案来支持微服务的开发测试,很多Java开发人员虽然听说过微服务,但是真正采用还是有犹豫的:“我知道,微服务是非常棒的,微服务器更容易维护和进一步开发,但我们没有建立一个良好的基于​​微服务架构的资源。”

许多尝试创建微服务应用程序(例如使用Netflix OSS堆栈)的开发人员都疑惑他们是否有足够的知识来配置整个系统。因为微服务架构所需知识与与单片monolithic 应用程序非常不同,需要额外的组件功能,如请求监视,用于在服务之间共享通信的队列,注册表服务,配置服务等等。同时为每个微服务保留一个单独的数据模型也是一个很好的做法。

在创建模块化Web应用程序时,开发人员必须专注于精心设计的业务领域设计。将模块之间的所有耦合最小化,这样至少避免了体系架构的复杂性。

Abixen Platform是一个完整的微服务架构系统,其源码可见Github地址:https://github.com/abixen/abixen-platform,其体系组成部分如下:

1. Eureka:作为服务的注册器。

2. Hystrix仪表板:允许我们实时监控请求状态(例如,多少请求超时,多少次成功,多少次失败等)。

3. Zipkin:一种分布式跟踪系统,可帮助您收集应用程序中发生高延迟问题(性能慢)所需的数据。

4. Redis数据库:用于保存登录用户的信息。

5. RabbitMQ:用作在特定微服务器之间发送消息的队列。例如,核心微服务删除一个模块实例,需要让商业智能微服务或Web内容微服务删除与其相关的所有配置。

6. Abixen Platform Common:包含用函数式微服务实现的通用API的JAR。

7. Abixen平台配置:配置微服务。整个应用程序可以在YAML文件中进行逐个配置。

8. Abixen Platform Web Client:核心功能的静态内容,如页面和模块管理,安全管理等。

9. Abixen平台网关:起到安全网关的作用。每个请求都必须通过这个微服务。

10. Abixen平台核心:拥有自己的业务核心数据库,拥有平台的核心功能,如页面和模块管理,安全管理等。

11. Abixen平台商业智能服务:由于应用程序带来了函数性的微服务,因此我们将在这里放置一个用于商业智能报告,图表创建和进一步管理的模块。它也有自己的数据库。

12. Abixen平台Web内容服务:这与上述服务类似,但是这个函数可以提供内容创建功能,例如用户可以创建文章。它还有自己的数据库。

13. 您的服务:由开发人员使用该平台创建的定制微服务。

该架构基于Netflix OSS技术栈。函数性的微服务不需要在整个平台上都要部署,您如果不需要图表或文章管理器,您也可以部署这个平台并使用独立开发的微服务。

该架构也很好地映射到Amazon组件。使用诸如EC2,ALB,ECS,ECR,Route53,CloudWatch,Elasticache,ERD和SES之类的服务在AWS上部署应用程序。

工作原理:

1. 用户使用Web客户端生成请求。通过Zuul Proxy,请求被转发到网关微服务。

2. 网关微服务执行安全操作。如果用户未通过身份验证,则会引发“未经授权”的异常。如果经过身份验证,则Zuul Proxy会决定将请求发送到核心平台或指定的微服务,如商业智能,Web内容或由第三方开发人员创建的。

在下面的列表中,我们可以看到路由的示例配置:

zuul:
  host:
    connect-timeout-millis: 10000
    socket-timeout-millis: 60000
  routes:
    # Begin of custom module microservices - add mapping relevant to your microservice
    # Begin of Business Intelligence microservice
    businessIntelligenceApplication:
      path: /service/abixen/business-intelligence/application/**
      url: http://business-intelligence-service:9091/service/abixen/business-intelligence/application
      sensitive-headers:
    businessIntelligenceApplicationApi:
      path: /api/service/abixen/business-intelligence/application/**
      url: http://business-intelligence-service:9091/api/service/abixen/business-intelligence/application
      sensitive-headers:
    businessIntelligenceAdmin:
      path: /service/abixen/business-intelligence/control-panel/**
      url: http://business-intelligence-service:9091/service/abixen/business-intelligence/control-panel
      sensitive-headers:
    businessIntelligenceAdminApi:
      path: /api/service/abixen/business-intelligence/control-panel/**
      url: http://business-intelligence-service:9091/api/service/abixen/business-intelligence/control-panel
      sensitive-headers:
    # End of Business Intelligence microservice
    # Begin of Web Content microservice
    webContentApplication:
      path: /service/abixen/web-content/application/**
      url: http://web-content-service:9092/service/abixen/web-content/application
      sensitive-headers:
    webContentApplicationApi:
      path: /api/service/abixen/web-content/application/**
      url: http://web-content-service:9092/api/service/abixen/web-content/application
      sensitive-headers:
    webContentAdmin:
      path: /service/abixen/web-content/control-panel/**
      url: http://web-content-service:9092/service/abixen/web-content/control-panel
      sensitive-headers:
    webContentAdminApi:
      path: /api/service/abixen/web-content/control-panel/**
      url: http://web-content-service:9092/api/service/abixen/web-content/control-panel
      sensitive-headers:
    # End of Web Content microservice
    # End of custom module microservices
    resource:
      path: /resource/**
      url: http://core:9000
      sensitive-headers:
    api:
      path: /api/**
      url: http://core:9000/api
      sensitive-headers:
<p>

如何创建自己的微服务?

想要创建自己函数式微服务的开发人员可以使用通用API,有抽象接口,还必须包含部署描述符。该部署描述符文件描述了包含哪些模块,什么可用的静态资源,以及控制面板中是否有某种配置面板(控制面板是可配置的)。下面的列表是一个微服务器的部署描述符示例:

abixen:
  platform:
    adminSidebarItems:
      -
        name: data-source-sidebar-item
        title: Data Sources
        angularJsState: application.multiVisualisation.modules.databaseDataSource.list
        orderIndex: 9
        iconClass: fa fa-database
    modules:
      -
        name: multi-visualisation
        angularJsNameApplication: platformChartModule
        angularJsNameAdmin: platformChartModule
        title: Multi Visualisation
        description: This is a multi visualisation module
        relativeInitUrl: /service/abixen/business-intelligence/application/multi-visualisation/html/index.html
        adminSidebarItems:
          -
            name: data-source-sidebar-item
        staticResources:
          -
            relativeUrl: /service/abixen/business-intelligence/application/business-intelligence.min.css
            resourcePageLocation: HEADER
            resourcePage: APPLICATION
            resourceType: CSS
          -
            relativeUrl: /service/abixen/business-intelligence/application/business-intelligence.min.js
            resourcePageLocation: BODY
            resourcePage: APPLICATION
            resourceType: JAVASCRIPT
          -
            relativeUrl: /service/abixen/business-intelligence/application/lib/d3.min.js
            resourcePageLocation: BODY
            resourcePage: APPLICATION
            resourceType: JAVASCRIPT
          -
            relativeUrl: /service/abixen/business-intelligence/application/lib/nv.d3.min.js
            resourcePageLocation: BODY
            resourcePage: APPLICATION
            resourceType: JAVASCRIPT
          -
            relativeUrl: /service/abixen/business-intelligence/application/lib/nv.d3.min.css
            resourcePageLocation: HEADER
            resourcePage: APPLICATION
            resourceType: CSS
          -
            relativeUrl: /service/abixen/business-intelligence/application/lib/angular-nvd3.min.js
            resourcePageLocation: BODY
            resourcePage: APPLICATION
            resourceType: JAVASCRIPT
          -
            relativeUrl: /service/abixen/business-intelligence/control-panel/business-intelligence.min.css
            resourcePageLocation: HEADER
            resourcePage: ADMIN
            resourceType: CSS
          -
            relativeUrl: /service/abixen/business-intelligence/control-panel/business-intelligence.min.js
            resourcePageLocation: BODY
            resourcePage: ADMIN
            resourceType: JAVASCRIPT
<p>

我们可以看到,Java开发人员不必从头开始创建整个微服务架构。Abixen平台为你准备了现成的微服务解决方案,并可以立即开始开发函数式微服务。

Java-Based Microservices Architecture and Abixen -

    

7
猜你喜欢