分类 架构 下的文章

浅淡微服务的弊端

上篇文章就表面提到了微服务的优点,但是,微服务架构不是银弹
点我传送到上篇文章(浅谈微服务的优点)

注释:
银弹:
银弹这个词,是来源于欧洲中世纪的传说。看过电影黑夜传说的人肯定知道。说的是狼人这样的怪物,一般的子弹是打不死它的。必须使用银子做的子弹才能杀死它。
后来“银弹”这个词就被用来形容,那些特别有效果、一用就很灵的方法。和走街串巷卖的“神药”,有类比的含义。神药是指一种什么病都能治的药,这明摆着是不可能的事情,肯定是骗子。

分布式锁
在分布式系统中,常常需要协调他们的动作。
如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。

分布式系统
所谓分布式计算机系统,是指由多台分散的计算机,经互连网络的联接而形成的系统,系统的处理和控制功能分布在各个计算机上。分布式计算机系统又简称为分布式系统。

分布式事务
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
严格意义上的事务实现应该是具备原子性、一致性、隔离性和持久性。

原子性,可以理解为一个事务内的所有操作要么都执行,要么都不执行。

一致性,可以理解为数据是满足完整性约束的,肯定不会出现中间的状态,
比如你账上有400,我账上有100,你给我打200块,此时你账上的钱应该是200,我账上的钱应该是300,不会存在我账上钱加了,你账上钱没扣的中间状态。

隔离性,指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。

持久性,指的是一个事务完成了之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

总结 : 一些更新操作要么都成功,要么都失败。


目录:

  • 成本
  • 隐患以及复杂性
  • 技术栈

成本

1 . 学习/时间成本

微服务的基础设施包括:
CI、CD,限流,熔断,管理协作,分布式技术,
网关,服务监控,日志收集,重复代码
配置中心,负载均衡,发布成本
领域划分和明确
容器相关技术栈等等
也就是说对于服务来说,单个服务变得简单,整体服务变得复杂。
这些菜都端上来,如果没有很好的技术储备,估计是要不消化的。
当一个新人加入团队后,以前的单体式应用很方便于新人学习,只要在代码仓库将服务下载下来,本地启程序跑起来就好,模块与模块之间的调用不用管。
而当服务拆分成微服务之后,对于新人来说,学习成本是非常高的,需要有团队成员讲解这个服务的架构、微服务架构,再一个个的下载下来,解决服务与服务之间的调用问题,才能将服务运行起来。

2 . 金钱成本

不说了,本文句句不提钱,确句句都是钱。

3 . 维护成本

在微服务架构中最理想的模式是每个服务都可以单独运行起来,有自己的业务逻辑、数据库、中间件、机器资源,当业务逻辑改变时,对应功能的开发和部署成本很低。
但随之带来的问题是如何管理微服务拆分带来的多个微服务项目,你可能需要最底层的硬件资源都是容器,便于弹性伸缩,再到开发、测试、发布、运维时需要全自动化的系统,这需要有一个一定规模的团队,并且每个人都要有一定的技术储备。

隐患

1 . 设计

微服务架构的第一个问题是如何设计它,其中包括了如何做好服务间的最小粒度切分。
一个团队不可能再一次就设计出完美的微服务架构,一些微服务(如 PDF 生成器,Word文档分析/处理器)是显而易见的用例。
而只要是设计到处理业务逻辑,你的代码一定以及肯定,会在你思考如何将应用分割成正确的微服务集合之前,四处移动,因为程序员听最多的一句话就是“这个业务有变化”。

2 . 开发复杂性

您需要面对所有分布式系统都需要面对的复杂性,你可能需要在部署、测试和监控上做很多的工作,在服务间调用、服务的可靠性上做很多工作,甚至您还需要处理类似于分布式事务 的问题。尽管一些框架已经解决了许多的问题,但在实施微服务架构之前,您的团队必须储备足够的分布式系统相关的知识体系,以面对很多您在单体架构下可能没有面临过甚至没有考虑过的问题。

3 . 部署复杂性

在部署和管理时,由许多不同服务类型组成的系统的操作比较复杂,这将要求开发、测试及运维人员有相应的技术水平。

4 . 分布式复杂性

对于单体架构来讲,我们可以不使用分布式,但是对于微服务架构来说,分布式几乎是必会用的技术,由于分布式本身的复杂性,导致微服务架构也变得复杂起来。

技术栈(浅浅的举两个例子)

1 . 技术栈太过灵活

当每个人都可以自己主导一个服务的开发时,技术栈选型往往就变得多样化,以我的团队举例,语言有JAVA,PHP,Python,GO,Node,框架有Spring Boot,Gin,这还是大家统一用服务端语言的前提下,而HTTP连接则是显现出技术多样化的最好例子,Python有requests, Go则有 net/http, req, resty 等,他们的功能和能解决的问题都差不多,但是却因为不同成员的不同偏好而引入,而当A成员 去维护B成员的项目时,A成员就不得不再学一个重复的对他无提升的东西。

2 . 微服务难关之分布式

分布式本文以及提到很多次了,微服务技术架构必用分布式部署架构分布式架构将单机部署的业务拆分成多个机器部署,可根据业务情况无限的弹性伸缩,实现高性能、高可用、高并发。
但是使用分布式也存在很多问题,比如数据一致性问题。提供业务的服务不可能让不同的用户访问到的数据不是同一版本,这样整体就都乱了,因此使用了分布式模式之后,跨服务的操作需要分布式事务保障操作的原子性、当多人对同一个服务操作时需要分布式锁保证该操作的原子性。这些都是使用分布式架构带来的额外成本,我们享受了它所带来的福利,也必定要为其付出代价。

小结:

许多公司使用微服务并不是真正需要它们,尽管微服务现在很流行,但它们并不适合初学者。
大多数公司最好的做法是构建一个单体架构的项目,然后在绝对必要的时候将单体的部分拆分到微服务中。
把从头开始的微服务架构的机会留给那些财力雄厚的大型科技公司。

最后,感谢各位大佬的赞助!

1676563505501.jpg

浅谈微服务的优点

微服务是个极其复杂的概念,作者就一下表面问题浅谈一二。
篇幅有限,涉猎不深,有兴趣还请自行查阅。

目录

  • 微服务的意义
  • 架构理念
  • 微服务的好处
  • 微服务框架

术语解释

RPC:全称 Remote Procedure Call 中文 远程过程调用, 可以理解为调用远程机器上的方法。
单体架构:所有业务代码都在一起。

微服务的意义

我们在开发一个基础的商城程序时, 可能会包含若干模块, 如:用户模块 商品模块 广告模块 订单模块。
在系统建设初期,为了追求系统快速上线,我们可能会把一整套的模块代码, 都放到一个项目代码中。
这样的弊端:
1 . 在后期流量上来后我们发现某个模块功能失效,导致整个项目瘫痪,
举例:
公司进行业务推广,广告模块流量激增,但在此之前,没有做服务拆分,广告模块的高流量导致数据库带宽无法支撑,最终整个项目进入黑洞状态,用户无法下单,就连商城的界面也打不开。
上面的例子简单说明了传统开发模式的弊端,那么,将微服务理念加入之后呢?
示例:
在莫名的建议下,开发组将商城系统进行了模块服务拆分,这样广告模块就是一个独立的服务,用户参与活动时,直接从客户端调用活动服务,活动服务需要验证其他模块数据的时候,又通过RPC调用进行服务间的数据交互,从而实现压力的分摊,不在让全部服务压力都积压到单台服务器或者数据库上。

架构理念

随着需求的迭代,新功能的诞生,代码库会越来越大,尽管我们竭尽全力,希望将巨大的代码库做到清晰的模块化,但事实上模块与模块之间的界限很难划清,慢慢的,相似的代码随处可见,冗余的代码越来越多,修复bug和新功能越发吃力。
微服务则将这一理念应用在独立的服务上,根据业务的边界确定服务的边界,每个服务专注于服务边界之内的事情,因为可以避免很多由于代码库过大衍生出来的各种问题。
那么一个微服务到底应该多微小?足够小即可,不要过小。那么怎么衡量一个系统是否拆足够小了呢?当你面对这个系统时,不会再有 "过大" 想要拆小它的欲望时,那么它应该就足够小了。使用的服务越小,独立性带来的好处就越多,但管理大量的服务也会更加复杂

微服务的好处

  1. 扩展,如果使用较小的多个服务,则可以只对需要扩展的服务进行扩展,这样可以把那些不需要扩展的服务运行在更廉价的服务器上,节省成本。
  2. 可组合性,在微服务架构下,更细粒度的服务拆分会将这一优点体现得更淋漓尽致,像拼图一样组合功能。
  3. 高度自治,一个微服务就是一个独立的实体,可以独立被部署,也可以作为一个进程存在.
  4. 重构性高, 如果面对传统模式的(单体架构)的系统,里面的代码混乱丑陋,没人敢轻易去重构,但是如果你面对的是小规模及其小粒度的服务呢?重构一个服务甚至是重写,都是一件相对容易的事。
    我相信在(单体架构)删除一百行代码,将是一件致命的事情,但是在规划清晰的微服务架构下,删除一个服务也可以游刃有余。

微服务框架

所谓的微服务框架,是一种错误的说法,微服务是一种架构性上的概念,和框架无关。
我们服务间的互相调用,可以用 HTTP 协议 或者是 原生 TCP 协议 来实现,因此实际上,微服务和框架没有一点关系。
如果真要说是微服务框架的话,无非是封装了一些组件,让你更轻松的实现RPC调用
真正的微服务,最核心的其实是如何做好服务间的最小粒度切分,是架构规划的范畴。

小结

本篇主要将微服务和单体架构之间进行了对比,彰显了微服务的优点,具体使用还是要看具体情况。

区块链的发展历程

本篇将会提到:

  • 区块链1.0:货币
  • 区块链2.0:智能合约
  • 区块链3.0:超越货币 经济和市场的公正使用

区块链1.0:货币

A:技术栈
    从技术角度讲,比特币有三层:区块链、协议、货币
    第一层是底层技术,即区块链。区块链是去中心化的、公开透明的交易记录总账—其数据库由所有网络的节点共享的,
    由矿工更新,由全民监督,但没有人真正拥有和控制这个数据库。
    第二层是协议—区块链上进行资金转账的软件系统
    第三层是货币本身,比如比特币
    对于所有加密货币,区块链、协议、货币这三个层次是一种通用结构。每种币都代表一种货币、一种协议、对应的区块链。当然也可以共用区块链。
B: 2个行业问题
    双花问题:
        区块链技术出现之前,数字货币和数字资产具有无限可复制性,如果没有一个中心化的媒介,我们没办法确认一笔资产是否已经被花掉,
        所以需要可信赖的第三方机构比如银行、支付宝等。 区块链通过将点对点文件分享技术和公钥加密技术相结合,创造出了新式数字金钱,从而解决“双花”问题。
        货币的拥有权是由公共总账来记录,并由加密协议和挖矿社区来确认的。因为用户不需要相信交易另一方或者中心化机构 ,只要相信区块链协议下的软件系统即可。
    拜占庭将军问题:
        (战场上多个将军并不信任彼此但需要某种沟通协调机制):区块链每个账页都被网络上各个节点查看和验证,并不要托管到一个中心化的机构。
        使用者不需要担心是否相信交易对手,只要相信区块链网络就行,这就解决了拜占庭将军问题。
C: 数字货币怎么运作?
    有三部分构成:
        地址、私钥、钱包软件 地址:别人能够把比特币发给你的地方 
    私钥:
        是加密学的秘钥,可以把比特币经过私钥加密发送给别人(相当于一个开保险箱的钥匙) 
    钱包软件:
        运行在你电脑上的操作私钥管理比特币的软件
D:数字钱包安全
    数字货币目前的一个问题,一旦私钥丢失就无法找回,而普通用户没有很好的保护私钥的能力,这也是比特币目前未被主流接纳的原因。 
    这个问题Circle等公司在试图解决,给用户提供好的备份保存解决方案。 私钥的这个特性也有很大优势,去中心化的方式相比中心化,
    会减少黑客攻击中心化机构带来的安全问题,比如Apple、Facebook、支付宝这些顶级公司都曾被黑客入侵。
E:1.0的现实运用
    美国出现了Bitpay,Coinbase这些成熟的比特币支付方案提供商。但目前商户面临传统支付、比特币支付两套系统独立运行的问题,影响用户体验,Intuit
    通过PayByCoin模块在传统支付上集成了Bitpay,Coinbase支付,国内如果支付宝、微信能切入,能极大的促进数字货币的普及率。 
    2个领域还有前景:对传统支付的升级改造;对国际汇款的颠覆,传统国际汇款交易费最高达7%~30%
F:和法币关系
    目前比特币的交易是用法币结算的,跟法币也不是替代关系。价格波动性是数字货币未被广泛使用的一个因素,所以出现了和美元锚定的Ripple;Bitpay,
    Coinbase提供了法币、比特币实时转换的解决方案。
G:监管现状
    除少部分国家明令禁止外,大部分国家采取了兼容并包的态度,随着时间的推移,越来越多国家的央行开始认可数字货币以及背后的区块链技术。

区块链2.0:智能合约

区块链1.0应用以比特币为代表,为了解决货币和支付手段的去中心化,那么区块链2.0就是更宏观的对整个市场的去中心化,利用区块链技术来转换许多不
同的资产而不仅仅是比特币,通过转让来创建不同资产单元的价值。
区块链技术的去中心化账本功能可以被用来注册、确认、转移各种不同类型的资产及合约。所有的金融交易都可以被改造成在区块链上使用,
包括股票、私募股权、众筹、债券、对冲基金和所有类型的金融衍生品:期货、期权等。

金融服务: 
    区块链的一个重要方向是利用数字货币与传统银行和金融市场做对接。
    · Ripple Labs正在使用区块链技术来重塑银行业生态系统,使用Ripple支付网络可以让多国银行直接进行转账和外汇交易,而不需要第三方中介。
    Ripple也开发
    了一个智能合约和自己的程序语言Codius。
    · Paypal在做比特币和传统金融和支付市场对接的解决方案。
    · BTCjam在做基于区块链的去中心化P2P借贷。
    · Overstock在做基于区块链的去中心化证券交易所Medici。

智能资产: 
    区块链可以用于任何资产注册、存储和交易,包括金融、经济和货币的各个领域;有形资产、无形资产。
    区块链开辟了不同类型各个层次的行业运用功能,涉及货币、市场和金融交易。使用区块链编码的资产通过智能合约成为智能资产。
    · 智能资产是指所有以区块链为基础的可交易的所有资产类型,包括有形和无形资产。
    智能资产通过区块链控制所有权。并通过合约来符合现有法律,
    比如:预先建立的智能合约能够当某人已经偿还全部贷款后,自动将车辆所有权从财务公司转让到个人名下,这个过程是全自动的。 
    智能资产有可能让我们构建无须信任的去中心化资产管理系统。

智能合约: 
    智能合约意味着区块链交易远不止买卖货币这些交易,将会有更广泛的指令嵌入到区块链中。传统合约是指双方或者多方协议做或不做某
    事来换取某些东西,每一方必须信任彼此会履行义务。而智能合约无须彼此信任,因为智能合约不仅是由代码进行定义的,也是由代码强制执行的,
    完全自动且无法干预。
    众筹: 基于区块链的众筹平台支持初创企业通过创建自己的数字货币来筹集资金,分发自己的“数字股权”给早期支持者,这些数字货币作为支持初创公司应获股份
    的凭证。比特币预测市场: 通过对现实生活中可能发生的事情进行结果预测,比如选举、体育赛事等。
    无须信任的借贷: 区块链的去信任机制网络是智能资产和智能合约发展的重要推动因素。这让不认识的人在互联网上把钱借给你,而你可以将你的智能资产作为抵押,
    这必然大幅降低借贷成本让借贷更具竞争力。非人为干预的机制也让纠纷率大大降低。

以太坊:
    图灵完备的虚拟机 区块链技术将多个领域内的概念和操作结合在一起,包括计算、通讯网络、加密学和人工智能。 
    在区块链2.0中,我们需要通过智能合约和智能资产来记录和转移更多复杂的资产类型,
    我们就需要第三步—更强大的脚本系统—最终实现图灵完备(能够运行任何货币、协议和区块链)。以太坊就是一个区块链
    为基础的项目,旨在提供一个图灵完备脚本语言和图灵完备平台。

区块链3.0:超越货币、经济和市场的公正应用


区块链2.0通过智能合约来彻底颠覆了传统货币和支付的概念,而区块链3.0我们将探讨区块链在非金融货币领域中的价值。
上文我们认识到区块链之所以能够做很多事情是因为区块链具有价值转移和信用转移的优势,这是一种“去信任”的架构。
“去信任”架构就是系统中的参与方无须信任对方就可以完成交易和协作,这是传统互联网最薄弱的一项。
互联网时代我们通过中心化方式让信用局限在一定机构、国家内传递,但面对全球流通仍然没有好办法。
在不同宗教、政治、文化的全球活动中,唯有通过数学来实现更多共识。
通过信用共识,基于数学的区块链实现了全球货币、支付的全部功能,进入3.0时代,更远远超越了货币、支付和金融这些经济领域,将利用其优势重塑人类社会的方方面面。

区块链基于信用共识,使其擅长构建“强去中心化”特性的鉴证类服务。
区块链是一个高效的模型 区块链不仅会重塑货币市场、支付系统、金融服务及经济形态的方方面面,而且会改变人类的每个领域。
区块链技术能够从根本上成为让组织形态减少摩擦并且提高效率的新方案。区块链去中心化的特性能与整个网络有足够的流动性将所以人连接在一起,
去中心交易:
    提供了一种通用技术和全球化的解决方案,自动化的实现物理资源和人力资源的分配,解放了过去由人力来完成的各种协调和确认,
    也许以后所以人类活动都可以通过区块链来协调。

区块链技术涉及到的领域 区块链涉及到多个领域知识:
    公钥和私钥加密、P2P文件共享、分布式计算、网络模型、匿名、区块链账本、加密数字货币和协议等。
    只有理解了这些概念才能提出基于区块链的创新解决方案,并应用到已知领域,反过来也会推动区块链的发展。
    
区块链技术能够实现量子级别管理 区块链可以促进一种全自动的计算方式,这是一种通用的无缝协作方式,让没有数量限制的参与方共同协作,这种通用协作方式是过去人类无法想象的。
区块链促进大数据预测任务自动化 区块链可以和大数据连接,大数据预测分析可以和自动执行的智能合约完美结合,区块链技术加入到经济支付层面,做为量化工具,
海量自动执行的任务会解放大量的人类生产力。区块链也会促进大数据向下一个数量级发展。

分布式反审查组织模式 区块链为跨国公共产品服务的管理问题提供了解决方案。
维基解密是个案列。斯诺登泄密事件中,由于强大中心化政府干预,信用卡支付网络和Paypal都拒绝支持这种捐赠,这样维基解密在经济上被完全封锁了,这种情况,可以使用比特币进行捐款。
· Namecoin:
    去中心化域名系统 Namecoin可以用于替换DNS系统,无法被任何公司或政府控制。它能够让全世界任何人不受限制和审查,自由的在互联网上发布信息。
· 数字艺术:
    区块链认证服务 数字艺术是区块链加密技术能提供颠覆性创新的另一个舞台。
    数字艺术在区块链行业主要应用是指,利用区块链技术来注册任何形式的知识产权,或将鉴证服务变得更加普遍,如合同公证。
    数字艺术还可以针对在线图片、照片或数字艺术作品这些数字资产,通过区块链来保护知识产权。
· Monegraph:
    在线图片保护 Monegraph用户只要将之前创建且发布在网上的图片资产进行注册,就可以对他们的这些数字资产进行货币化。
    就像比特币能够验证货币的所有权,Monegraph能够验证资产所有权:这是一个区块链智能资产运用案例。

下一篇:区块链基础知识
本篇文章特别鸣谢:
感谢瑞琪子的文案参考,瑞琪子是一名特别出色的文案编辑,643368289@qq.com是她的邮箱,欢迎骚扰。