
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
软件编程开发技术随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,软件编程开发常见问题都有哪些。
1、网络是可靠的
网络是不可靠的
很多软件工程师常常假设网络是可靠的,但实际并非如此。相比20年前,现在的网络会可靠很多,但是仍然具有很大的不确定性。如上图所述,SerivceB可能完全是正常运行的,但是因为网络的问题,ServiceA发出的请求无法到达ServiceB。一种更糟糕的场景是,ServiceB可以收到ServiceA的请求,并处理了相关的数据,但是网络问题导致了ServiceA无法收到ServiceB的响应,从而造成了数据不一致。网络的不可靠也是为什么系统中常常出现服务通信超时、服务熔断等的原因。
总而言之,如果假设网络是可靠的,那么我们设计出来的软件系统将会是不可靠的。
2、时延是0
时延不为0
服务内组件间的函数/方法级别的调用,耗时是微妙,甚至是纳秒级别;但是服务间的远程调用(比如REST、消息队列、RPC),耗时会是微秒级别,甚至在异常场景会达到了秒级!在设计系统,特别是分布式系统时,时延是一个无法被忽视的因素,我们必须清楚系统的平均时延,否则设计出来的方案可能根本不可行。比如,假设系统中服务间通信时延为100ms,如果一个请求的调用链涉及到10个服务,那么该请求的时延将会是1000ms!这么高的平均时延对于一般系统来说是完全无法接受的。
进行系统设计时,考虑平均时延还不够,更重要的是95th和99th百分点。一个系统的平均时延可能仅仅只有数十毫秒,但是95th百分点的时延却达到了数百毫秒,很多时候,这也恰恰成为了拖垮整系统性能的那块“短板”。
3、带宽是无限的
带宽是有限的
在单体架构中,业务流程都在单服务内闭环,消耗的带宽很少甚至为0,因此带宽并不是主要关注点。一旦将系统拆分成分布式架构,一个业务流程可能涉及多个服务间的通信,带宽就成了必须考虑的因素。带宽的不足,会导致网络变慢,从而影响系统的时延(谬误2:时延是0)和可靠性(谬误1:网络是可靠的)。
假设在一个Web系统中,ServiceA负责处理前端请求,ServiceB负责管理用户信息(包括姓名、性别、年龄等45个属性)。ServiceA每处理一个请求都需要向ServiceB查询用户姓名(200bytes),而在一次请求中,ServiceB却返回了用户的所有信息(500kb)。如果系统每秒处理2000次请求,每次请求消耗500kb带宽,那么每秒消耗的总带宽会是1Gb!如果ServiceB仅仅返回必须的姓名,那么同等条件下,每秒消耗的总带宽仅仅是400kb。
此类问题就是所谓的stampcoupling,解决方法也很多,比如在请求中添加属性选择,使用GraphQL替代REST。相比于这些技术手段,更重要的是确定服务间通信所需的小数据集,并在进行系统设计时将其作为一个重点关注的因素。
4、网络是安全的
网络是不安全的
VPN、防火墙等的广泛使用,使得很多工程师在设计系统时忽略了“网络是不安全的”这一重要原则。特别是从单体架构演进到分布式架构以后,系统被攻击的概率将会大大增加。因此,在分布式系统中,每个服务都必须是安全的endpoint,这样才能确保任何未知或恶意的请求都被拦截掉。当然,安全是有代价的,这也是像微服务架构这类细服务粒度的系统,一次业务请求中调用链过长后性能极速下降的重要原因。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。