摘要:
您正工作于大型复杂的单体应用程序上,这是相当不错的机会。您开发和部署应用程序的日常经历是缓慢而痛苦的。微服务似乎是一个遥不可及的天堂。幸运的是,有一些战略可以用来逃离单体地狱。在本文中,我将描述如何将单体应用程序逐渐重构为一组微服务... 阅读全文
摘要:
部署单体应用程序意味着运行一个或多个相同副本的单个较大的应用程序。您通常会在每个服务器上配置 N 个服务器(物理或虚拟)并运行 M 个应用程序实例。单体应用程序的部署并不总是非常简单,但它比部署微服务应用程序要简单得多。 阅读全文
摘要:
在本教程中,我们将使用 OAuth 来保护 REST API,并以一个简单的 AngularJS 客户端进行示范。我们要建立的应用程序将包含了四个独立模块:授权服务器、资源服务器、 UI implicit ( 一个使用 Implicit Flow 的前端应用)和 UI password ( 一个使用 Password Flow 的前端应用)。 阅读全文
摘要:
单体应用程序通常具有一个单一的关系型数据库。使用关系型数据库的一个主要优点是您的应用程序可以使用 ACID 事务。很不幸的是,当我们转向微服务架构时,数据访问将变得非常复杂。这是因为每个微服务所拥有的数据对当前微服务来说是私有的,只能通过其提供的 API 进行访问。封装数据可确保微服务松耦合,独立演进。如果多个服务访问相同的数据,模式更新需要对所有服务进行耗时、协调的更新。 阅读全文
摘要:
或许您正在使用 REST 端点(endpoint)来摆脱 Web 服务和客户端。如果您是一名 Java 开发人员,您可能已经尝试过 JAX-RS、Spring REST 或者两者。但哪一个好用呢?在这篇文章中,我将介绍两者之间的差异,使用大体相同的代码进行对比。在之后的博文中,我将向您展示如何轻松地使用 Apache Shiro 和 Okta 来保护这些 REST 端点。 阅读全文
摘要:
为了发送一个请求,您的代码需要知道服务实例的网络位置(IP 地址与端口)。在运行于物理硬件上的传统应用中,服务实例的网络位置是相对静态的。例如,您的代码可以从偶尔更新的配置文件中读取网络位置。服务实例具有动态分配的网络位置。此外,由于自动扩展、故障与升级,整组服务实例会动态变更。因此,您的客户端代码需要使用更精确的服务发现机制。 阅读全文
摘要:
在之前的博文《为什么是 Spring Boot》中,我们已经介绍了如何创建一个 Spring Boot 应用程序。但是,你可能还不了解它幕后究竟发生了什么,你想了解 SpringBoot AutoConfiguration 背后的原理。但在此之前,你应该先了解 Spring @Conditional 的特性,所有 Spring Boot AutoConfiguration 魔法都是基于它... 阅读全文
摘要:
在单体应用程序中,组件可通过语言级方法或者函数相互调用。相比之下,基于微服务的应用程序是一个运行在多台机器上的分布式系统。通常,每个服务实例是一个进程。因此,服务必须使用进程间通信(IPC)机制进行交互。稍后我们将了解到多种 IPC 技术,但在此之前,我们先来探讨一下涉及到的各种设计问题。 阅读全文