看完全都会了!java语言程序设计与数据结构配套网站

本文详细介绍了微服务的概念、优缺点、采用微服务的原因,以及微服务架构的先决条件、基础设施和设计模式。通过实例探讨了服务拆分、微服务框架的选择,如Spring Cloud和Service Mesh,并提供了相关技术栈的推荐,如Zuul、Sentinel、Kafka等。文章最后强调了微服务架构的演进路径和实践注意事项。
摘要由CSDN通过智能技术生成

微服务是什么

微服务起源于2005年Peter Rodgers博士在云端运算博览会提出的微Web服务(Micro-Web-Service),根本思想类似于Unix的管道设计理念。2014年,由Martin Fowler 与 James Lewis共同提出了微服务的概念,定义了微服务架构风格是一种通过一套小型服务来开发单个应用的方法,每个服务运行在自己的进程中,并通过轻量级的机制进行通讯(HTTP API)。关键的三点是small、automated以及lightweight

对比SOA,微服务可以看做是SOA的子集,是轻量级的SOA,粒度更细的服务,独立进程、数据分离,更注重敏捷、持续交付、DevOps以及去中心化实践。其共同的架构原理

  • 单一职责

  • 关注分离:

    控制与逻辑相分离

  • 模块化和分而治之

特点

  • 用服务进行组件化

  • 围绕业务能力进行组织

  • 是产品而非项目

  • 端点智能化和哑管道: 控制逻辑都在端点,管道仅仅是传输

  • 全自动化部署

  • 语言和数据的去中心化控制

  • 面向失败设计

  • 渐进式设计

综合来看,其优缺点如下:

优点

  • 模块的强边界

  • 独立部署

  • 技术选型的多样性

缺点

  • 分布式带来编程复杂度,远程调用的消耗

  • 舍弃强一致性,实现最终一致性

  • 操作复杂性要求有一个成熟的运维团队或者运维基础设施

为什么要采用微服务

是否选择微服务取决于你要设计的系统的复杂度。微服务是用来把控复杂系统的,但是随之而来的就是引入了微服务本身的复杂度。需要解决包括自动化部署、监控、容错处理、最终一致性等其他分布式系统面临的问题。即使已经有一些普遍使用的解决方案,但是仍然是有不小的成本的。

image

生产力和复杂度的关系如图所示,可见系统越复杂,微服务带来的收益越大。此外,无论是单体应用还是微服务,团队的技能都需要能够把控住。

马丁.福勒的一个观点是:除非管理单体应用的成本已经太复杂了(太大导致很难修改和部署),否则都不要考虑微服务。大部分应用都应该选择单体架构,做好单体应用的模块化而不是拆分成服务。

因此,系统一开始采用单体架构,做好模块化,之后随着系统变得越来越复杂、模块/服务间的边界越来越清晰,再重构为微服务架构是一个合理的架构演化路径。

四个可以考虑上微服务的情况

  1. 多人开发一个模块/项目,提交代码频繁出现大量冲突。

  2. 模块间严重耦合,互相依赖,每次变动需要牵扯多个团队,单次上线需求太多,风险大。

  3. 主要业务和次要业务耦合,横向扩展流程复杂。

  4. 熔断降级全靠if-else。

微服务的三个阶段

  1. 微服务1.0:

    仅使用注册发现,基于SpringCloud或者Dubbo进行开发。

  2. 微服务2.0:

    使用了熔断、限流、降级等服务治理策略,并配备完整服务工具和平台。

  3. 微服务3.0:

    Service Mesh将服务治理作为通用组件,下沉到平台层实现,应用层仅仅关注业务逻辑,平台层可以根据业务监控自动调度和参数调整,实现AIOps和智能调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java语言程序设计》的网上补充材料。 Part I -- General Supplements 1 Glossary 2 Installing and Configuring JDK 3 Compiling and Running Java from the Command Window 4 Java Coding Style Guidelines 5 Creating Desktop Shortcuts for Java Applications on Windows 6 Using Packages to Organize the Classes in the Text Part II -- IDE Supplements and IDE VideoNotes 1 TextPad Tutorial 2 NetBeans Tutorial One Page Startup Instruction VideoNotes 3 Teaching/Learning Java Effectively with NetBeans 4 Eclipse Tutorial One-Page Startup Instruction VideoNotes 5 Teaching/Learning Java Effectively with Eclipse 6 JBuilder X Tutorial JBuilder 2005 Tutorial One Page Startup Instruction VideoNotes 7 Learning Java Effectively with JBuilder 8 JBuilder 2007 Tutorial 9 Install GlassFish 3 on NetBeans 7 Part III -- Java Supplements 1 Java Characteristics 2 Discussion on Operator and Operand Evaluations 3 The "&" and "|" Operators 4 Bit-wise Operations 5 Statement Labels with break and continue 6 Enumerated Types 7 Packages 8 Regular Expressions 9 Formatted Strings 10 The Methods in the Object Class (finalize, hashcode, clone, getClass, equals) 11 Hiding Data Fields and Static Methods 12 Initialization Blocks 13 Extended Discussions on Overriding Methods 14 Design Patterns 15 Text I/O Prior to JDK 1.5 (Reader and Writer Classes) 16 Assertions 17 Packaging and Deploying Java Projects 18 Java Web Start 19 Signed Java Applets 20 GridBagLayout OverlayLayout SpringLayout 21 Networking Using Datagram Protocol 22 Creating Internal Frames 23 Pluggable Look and Feel 24 UML Graphical Notations 25 Testing Classes Using JUnit 26 JNI (example provided by Leslie Sears) 27 The StringTokenizer Class Part IV -- Database Supplements 1 SQL statements for creating and initializing tables used in the book: SQL Statements in MySQL SQL Statements in Oracle SQL Statements in Access 2 MySQL Tutorial 3 Oracle Tutorial 4 Access Tutorial 5 Introduction to Database Systems 6 Relational Database Model 7 Database Design 8 SQL Basics 9 Advanced SQL Part V -- Web Programming Supplements 1 HTML and XHTML Tutorial 2 CSS Tutorial 3 XML 4 Java and XML 5 Tomcat Tutorial 6 More Examples on JSF and Visual Web Development Part VI -- Case Studies 1 Complete Sudoku Solution (Chapter 7) Sudoku Solution Animation http://www.cs.armstrong.edu/liang/animation/SudokuAnimation.html 2 Address Book (Chapter 19) 3 Knight's Tour (Chapter 27) Knight's Tour Applet http://www.cs.armstrong.edu/liang/animation/KnightTour.html Part VII -- Useful Links 1 Java API http://download.oracle.com/javase/6/docs/api/index.html 2 Sorting Algorithm Video http://www.youtube.com/watch?v=INHF_5RIxTE
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值