有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

什么是Java微服务

我一直在网上搜索,但我对什么是java微服务有点困惑。我的意思是,我知道什么是web服务,并且我被告知每个wiki的微服务如下所示:

In computing, microservices is a software architecture style in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs.

微服务的属性包括:

Properties of microservices architecture:

It's a kind of architecture The services are easy to replace Services are organized around capabilities, e.g. user interface front-end, recommendation, logistics, billing, etc Services can be implemented using different programming languages, databases, hardware and software environment, depending on what fits best Architectures are symmetrical rather than hierarchical (producer - consumer)

但我需要一个具体的java示例来理解如何创建微服务。有没有人可以举个例子


共 (3) 个答案

  1. # 1 楼答案

    您可以检查以下内容: https://spring.io/blog/2015/01/20/microservice-registration-and-discovery-with-spring-cloud-and-netflix-s-eureka

    此示例基于以下服务:

    Netflix Eureka:

    Eureka是一种基于REST(代表性状态传输)的服务,主要用于AWS云中定位服务,以实现中间层服务器的负载平衡和故障切换

    Eureka只是一个服务注册表,其中包含所有已启动的服务实例服务器名和端口详细信息

    Netflix Zuul:

    Zuul是一种边缘服务,提供动态路由、监视、弹性、安全性等功能

    它是microservice客户端的端点。所有其他服务实例都在securedbox中进行保护,而Zuul则向截获所有客户端请求的客户端公开

    Netflix Ribbon:

    Ribbon是一个进程间通信(远程过程调用)库,带有内置的软件负载平衡器。主要使用模型涉及具有各种序列化方案支持的REST调用

    Ribbon与Zuul协同工作,在N个微服务实例运行时,使用大量算法选择性能最佳的服务节点来服务请求

    简单地说,Zuul拦截客户端请求,并根据请求URL使用Eureka服务发现查找Microservice实例的ip和端口。Ribbon选择最佳服务节点为请求提供服务,然后从Zuul请求路由到相应的microservice实例

    从我的项目角度来看的优势:

    我们可以根据网络流量添加或删除“N”个服务节点

  2. # 2 楼答案

    微服务与它的名字一模一样。这是一个执行非常简单功能的小型服务

    所以,是的,就代码而言,您可能正在寻找REST服务。请注意,任何其他API样式都可以。它不一定是REST,但是它必须是语言不可知的,您才能获得所有好处

    但这个想法远不止这些。其背后的想法是,他们非常专业,没有大的业务流程附加到他们。例如,如果您有一个处理付款的服务,则会写入审核日志,然后通知客户。我不认为这是一种微服务。写一个审计日志,可能是一个微服务,通知客户,处理信用卡。您的系统将通过调用3个必要的微服务来协调业务工作流(上面提到的3个步骤)。因此,您的系统是一个协调器,您不必担心实现业务功能

    微服务不会想太多,他们只是按照要求去做,但他们做得很快

    简而言之。以一个非常简单的业务函数为例,将RESTAPI放在它前面。你有一个微型服务

    微服务有几个有趣的属性:

    1. 它们可以独立部署。这很好,因为您可以部署应用程序的各个部分,而无需一次全部关闭
    2. 它们可以在自己的筒仓中运行。因此,如果您有一个非常需要内存的微服务,它可以部署在单独的服务器上,这样就不会影响系统的其余部分
    3. 他们可以使用不同的技术。您可能有Java中的微服务,有些是其他版本。网
    4. 它们控制依赖关系。当开发人员生活在一起时,他们倾向于从一个组件到下一个组件释放依赖项。在这里你不能
    <>但是你也应该考虑一些<强>缺点< /强>

    1. 在所有这些调用中维护一致的事务要困难得多。如果需要回滚,则需要JTA回滚所有其余调用。这可能是一种痛苦,在我的经验中表现得不太好

    2. 如果您没有一致的日志记录和一致的事务id,则通过系统跟踪事务以进行故障排除可能非常困难

    3. 如果由于可能产生副作用的部署而导致地面不断移动,则可能很难找到引入缺陷的位置

    4. 很明显,所有这些REST调用都会非常昂贵。我不一定要谈论传输,因为您的所有微服务可能都位于同一个数据中心。但是,每次通过网络进行呼叫时,都必须封送/解封数据,这可能会很快导致昂贵的CPU开销

  3. # 3 楼答案

    下面是一些用Java编写的微服务的具体示例。这些微服务是有教育意义的设计,所以希望这意味着你应该能够跟随

    不建议从头开始编写Java微服务,因为有很多框架可以加速您的开发。用于微服务开发的两个最流行的Java框架是Spring Boot和Dropwizard

    {a1}使用Dropwizard实现了一个基本的多语言持久新闻提要微服务

    feed8 project使用Spring Boot实现相同的功能相同的微服务

    甚至还有一个Spring Boot vs Dropwizard article分析差异