架构设计理念

波波的架构理念 背景 近期我会陆陆续续把我之前在infoq/聊聊架构等媒体上发表的文章,陆续搬到我的优快云博客上,这个是第一篇。 这篇有特殊的意义,2015年下半年的时候,我还没有养成定期总结梳理的习惯,是极客邦的郭蕾鼓励我尝试。今天回头看,这个投资有很大价值,这一路积累了不少东西,后面需要持续积累,将价值和影响力进一步扩大化。 我之前的背景主要是做互联网框架、中间件和平台架构,之前工作过的公司eBay、携程、... 阅读详情
### 服务化背景
经济学的经典著作[国富论]上讲到,从农业社会过渡到工业社会的标志是分工。如果把公司做类比,在最开始创业阶段大家都是全栈式,很像农民自给自足的生产。随着公司规模的增大,各种业务越来越复杂,研发人员逐步增多,分工越来越细,很多开发人员专注在某个模块自身的业务逻辑上,对系统其它部分则了解甚少。开发人员每天面临大量沟通与协调、代码冲突的问题,整体研发效率急剧下降。
在这种情况下单一系统已经不能满足业务需求,需要对系统进行拆分,在此过程中遇到了诸多挑战,例如各个模块的重用,一致性的保证,高可用性的保证等等。
因此提出了服务化,服务化的核心概念是将大量的核心业务逻辑以RPC的方式暴露给各个前端业务系统,并在底层框架层面实现服务发现、分组、治理。各个系统之间约定接口和规范,使用RPC进行通信调用。
服务化思想将促使开发人员在做系统分析的时候开始思考系统本身的边界,尽管在一开始肯定是不完善的,但是至少使得事情朝着正确的方向来推进。
### 整体设计
核心业务逻辑:什么才算核心业务逻辑?这是一个需要仔细斟酌的问题。一般来说,如果一段逻辑比较固定,有着确切的业务含义,并且存在被其它系统调用的可能,那么就认定其为核心业务逻辑。
这些逻辑均以标准的Java Interface接口对外暴露,接口输入一般是简单类型或者DTO对象,输出同理。DTO(DataTransferObject)对象一般包含了大量数据,意在减少RPC调用次数,一次性把可能会用到的数据都传输过去。
接口必须有相关的文档说明,开发人员不允许将未文档化的接口发布出去。
这样一来各个系统之间就形成比较松的耦合,业务逻辑保持在各自的单元中而不是四处泄漏,项目的边界和依赖也会随之变的清晰。
#### RPC:
由于公司历史原因,存在大量非Java的系统(主要是Python),因此在RPC选型中跨语言调用是一个硬性要求。另外原来使用的RPC的性能问题也是要着重解决掉的。
跨语言是一个比较棘手的问题,不同的语言之间由于数据类型的差异,导致RPC框架本身需要做大量的额外处理。为了保持RPC核心功能的稳定,将Java和非Java的处理分开来,非Java调用是以Java调用加上一层Json映射的方式实现。而Java调用是基于标准的序列化。公司趋势是核心业务逐步迁移到Java,因此整体上也是符合公司战略的。
RPC底层通信则是基于Netty实现,性能上非常有保证。
#### 服务发现:
服务提供者暴露了接口之后,服务消费者需要有感知。并且当某个服务提供者失联后,自动将其从可用的节点中剔除。
这里需要一个全局的配置中心,我们选用的是zookeeper,一方面是看中其稳定可靠;另一方面是文档和社区内容丰富,代码本身也是Java,具备较高的可维护性。最重要的一点,zk提供了强大的功能保证,完全满足服务发现的需求。
服务提供者在启动时,将自身的服务元数据(service metadata)注册到zk中,元数据包含了自身的IP地址,RPC端口,所暴露的Interfaces集合,启动时间等信息。以EPHEMERAL的方式创建zk节点,这样一来一旦当前这台机器挂掉,zk就会自动将该节点删除。
服务消费者在启动时创建一个守护线程,该线程从zk读取节点列表,并在该zk路径下创建一个watch,当列表有变时,zk会自动回调通知该线程。此时再重复读取一次,拿到最新可用节点列表。需要注意的,zk的watch机制对网络要求较高,如果网络不是非常稳定,则watch可能存在失效的问题,因此还有一套方案就是简单粗暴的轮询,即每隔一段时间如10秒,从zk获取列表,然后同上一次的做比较,将差集更新。
#### 服务分组:
同样的服务可能会被多个不同的消费者调用,某些消费者可能调用量非常大,而某些则很少,这样将会导致整个提供者集群都被这些调用量大的消费者拖慢,性能严重下降。解决这个问题的最佳方法是将服务提供者集群切分成多个组,每个组的服务能力各不相同,例如重要并且量大的服务,其分组的节点数和节点质量(硬件条件)都将比其余分组高。
在实现上,服务提供者自身对分组是无感知的,打包部署等操作都是无差别对待。分组只对服务消费者有意义,消费者在编译打包时确定欲调用的服务组,并在启动后从配置中心(zk)拿到运维人员事先配置好与之对应的分组节点列表来初始化。
服务分组对整个系统的稳定性有着重大的意义。在业务层面可以预见到的是类似于短时间内聚集大量流量的营销活动将不会给整站带来过大的压力。
#### 服务治理:
当服务越来越多的时候,服务之间的相互依赖将会非常复杂。不同的服务级别要求也不一样,例如有的非核心服务如果挂掉,不能影响业务主流程,因此强弱依赖是一个关键点。服务治理的另外一个方面就是动态负载均衡与服务性能审计。
对服务依赖的梳理,建立在一套分布式调用跟踪系统之上。目前这套系统还是处在比较初级的阶段,但是已经基本上可以满足需求。核心思想是RPC框架在调用时自动将这次调用的token传递给下游(服务消费者),下游将此token放入ThreadLocal中。每一次调用都将当前上下文(如token、执行时间、执行方法名、执行是否成功)等信息打到日志。
日志采集系统定时将各个节点上的调用链日志统一拉取到HDFS。最后通过离线分析工具如Hive,得到调用链的上下游关系和执行时间。这样一来服务依赖关系和性能审计都得到了解决。
关于方法级别的调用链跟踪,请参考我的另一篇博文。
整个过程暂时无法做到实时,据了解taobao的鹰眼(类似的分布式调用跟踪系统)也未做到完全实时,而是有一定延迟的准实时。这个就要看具体的场景和业务需求了。
动态负载均衡是一个比较大的领域,根据当前公司的业务发展情况来看并不是一个特别紧急的需要。因此就简单做了一下负载均衡,即单纯的round-robin。后面甚至可以考虑引入独立的或第三方的均衡模块来辅助。

《企业元宇宙架构设计前沿理念,AI应用架构师深度分享》 想象一下,有一个世界,它和我们现实生活的世界平行存在,但又有着无限的可能性。在这里,企业可以以全新的方式展示产品、开展商务活动、进行员工培训等等,这就是企业元宇宙。元宇宙这个概念并非突然出现,它是数字技术不断发展的产物。从早期的虚拟现实(VR)、增强现实(AR)技术,到后来的区块链、人工智能(AI)等技术的融合,逐步为元宇宙的发展奠定了基础。对于企业来说,元宇宙就像是一片新的商业大陆等待开发。在这个虚拟空间里,企业能够突破物理空间的限制,与全球范围内的客户、合作伙伴进行互动。 阅读详情

相关推荐

互联网架构设计理念漫谈

高并发高可用的可伸缩的架构设计的原则 空间换时间 数据与计算 多维度可用 伸缩 优化资源利用

架构设计核心理念

通过上述技术手段,当任何一台服务器宕机或出现各种不可预期的问题时,就将相应的服务切换到其他可用的服务器上,不影响系统的整体可用性,也不会导致数据丢失。伴随业务的发展、创新,运行环境的变化,对技术也就提出了更多、更高的要求。因此,面对不同业务系统的不同需求,对高可用与高性能也会有不同的决策结论,其实现的复杂度也各不相同。所有的预测都存在不正确的可能性。伴随业务的发展、创新,运行环境的变化,对技术也就提出了更多、更高的要求。伴随业务的发展、创新,运行环境的变化,对技术也就提出了更多、更高的要求。

雪辉博客 1936

别再只盯着DDR5了!聊聊3D DRAM:它凭什么能解决AI算力的内存墙难题?

本文深入探讨了3D DRAM技术如何突破AI算力的内存墙限制。通过立体堆叠架构,3D DRAM在存储密度、带宽和延迟方面实现显著提升,有效解决AI训练和推理中的内存瓶颈问题。文章还分析了三星、SK海力士等巨头的技术路线图,并指出商业化面临的挑战与机遇。

weixin_42685438的博客 189

关于架构的一些理念

软件的需求是不断变更的,软件的升级也是必然的,因此我们应该再进行架构设计的时候,避免后续软件需求变更,导致软件退化,并且在软件的升级过程中,我们要适时的进行架构的升级,以保持高质量的软件设计。如果我们每次软件升级的时候,没有及时的调整程序结构,而是在原有的程序结构上不断的加入代码,最终的软件就会退化。他分为战略设计和战术设计两个层次:DDD的战略设计可以帮助公司的领导人进行团队的划分,人员的组织,产品线的规划,也可以帮助产品经理对产品功能进行规划,还可以帮助架构师进行项目架构的规划,术站的选择等;

q__y__L的博客 1154

voc与txt互转

voc2txt # coding:utf-8 from __future__ import print_function import os import random import glob import xml.etree.ElementTree as ET def xml_reader(filename): """ Parse a PASCAL VOC xml file """ tree = ET.parse(filename) size = tree.find('siz

weixin_44898889的博客 826

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

架构设计系列 3 : 基本理论(一)

更好的可重用性:通过使用合成/聚合,可以根据需要组合不同的对象来实现代码的可重用性,且合成/聚合本身是一种松耦合,可以更便捷地组装新的对象类型。是一项简单易懂且重要的原则,但是在实 际过程中往往最容易忽略的,它强调在应用中,一个类应该只有一个引起变化的原因,只有一个职责。更好的可扩展性:通过使用合成/聚合,更便捷地添加新的功能和行为到应用中,这种灵活的关系,可以更容易适应新的需求和变化。提高代码的可维护性和可重用性:允许系统通过扩展已有的代码来应对新的需求,而不是修改已有的代码,降低引入错误的风险。

weixin_39757802的博客 1027

Python-编写点云处理软件(二)点云软件ui制作之仿CC界面

至本篇结束,我们已经能够获得一个有点模子的界面了,但是具体的功能还没有编写,后续的文章将逐渐完善功能。

weixin_43894929的博客 3953

程序员蜕变为架构师必须要知道的「架构理论」

架构目的和指标 架构目的: 架构设计的主要目的是为了解决软件系统复杂度带来的问题,是用最小的人力成本来满足需求的开发和响应需求的变化,用最小的运行成本来保障软件的运行。让软件达到“高内聚、松耦合”,从而使软件具有: 易扩展——易于增加新的功能 更强壮——不容易被粗心的程序员破坏 可移植——能够在多样的环境下运行 更简单——容易理解、容易维护 设计目标: 可扩展性(Scalable) 可靠性(Reliable),支持灰度发布,异地容错 可伸缩 (Extensible),支持水平扩展和垂直增强

azhuyangjun的博客 485

【测开求职】面试题:操作系统 吐血整理

本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。涵盖考研范围内的所有知识内容,读者可以先查看上面的链接走一遍操作系统的整体框架结构。其中,重点难点以及易混淆的知识点,笔者用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。另外操作系统在校招中有非常明显的重点,一般情况下只会考察进程管理,内存管理,和设备管理,且这三者考察频率依次递减,文件管理基本不会考察。

vector的博客 7912

【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法

相比C文本类编程语言,Simulink图形化编程语言的优势是逻辑思路和数据流清晰了很多,劣势是程序执行的时序不明确,而且各个模块的配置使编程的灵活度下降了不少,在使用习惯上面总感觉有各种限制。本文就是拆解Simulink中最基础的几个编程模块,发扬它的优势,避开劣势。

Mr.Cssust的博客 3852

【架构设计】《Java 架构魔法:理念与实践铸就卓越系统,架构设计需要遵循的理念及最佳实践》

Java 架构设计的理念和最佳实践就像是一把把神奇的钥匙,能打开通往卓越系统的大门。希望本文能为你在 Java 架构设计的道路上提供有力的支持。快来评论区分享你的经验和见解吧,让我们一起把 Java 架构设计变得更加精彩!😉。

Dylaniou的博客 1641

手把手教你 Ubuntu 24.04 离线安装 Ollama

本文介绍 Ubuntu 下离线安装 Ollama 并使用 Ollama 部署 llama3.1-70b 大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1019

Sentinel 动态数据源架构设计理念与改造实践

在介绍集群限流之前需要首先掌握动态数据源的配置方式,本文将根据 Sentinel 官方提供的代码提出整体架构思路,并最终给出实践指导。温馨提示:本文主要分为动态数据源架构设计理念、从官方...

JAVA葵花宝典 390

第51节:cesium 范围查询(含源码+视频)

cesium 范围查询

qq_29384639的博客 1498

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Unity UI架构设计理念

Unity UI架构设计理念 https://www.jianshu.com/p/e64347dff4fe Unity UI架构设计理念 1.以ARPG为例,多个场景会反复出现相同的“UI窗体”,造成多个场景中反复加载相同的UI窗体。 解决方案: “UI框架” 需要缓存项目(例游戏项目)中常用的“UI窗体"。 2.开发商业复杂项目时,各个UI(...

kuangben2000的博客 2976

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

秒杀架构设计理念

业务介绍 秒杀架构设计 什么是秒杀?通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动 比如说京东秒杀,就是一种定时定量秒杀,在规定的时间内,无论商品是否秒杀完毕,该场次的秒杀活动都会结束。这种秒杀,对时间不是特别严格,只要下手快点,秒中的概率还是比较大的。 淘宝以前就做过一元抢购,一般都是限量 1 件商品,同时价格低到「令人发齿」,这种秒杀一般都在开始时间 1 到 3 秒内就已经抢光了,参与这个秒杀一般都是看运气的,不必太强求 业务特点 瞬时并发量大 秒杀时会有大量用户在同一时间进行抢购,瞬时并发

weixin_47446306的博客 332

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

从架构设计理念到集群部署,全面认识KubeEdge

摘要:本篇文章将从KubeEdge架构设计理念、KubeEdge代码目录概览、KubeEdge集群部署三方面带大家认识KubeEdge。 KubeEdge即Kube+Edge,顾名思义就是依托K8s的容器编排能力和调度能力,实现云边协同、计算下沉、海量设备的平滑接入。本篇文章将从KubeEdge架构设计理念、KubeEdge代码目录概览、KubeEdge集群部署三方面带大家认识KubeEdge。 KubeEdge架构设计理念 1、Kubernetes的架构 这里是一个经典的K8s架构,K8s相信

华为云官方博客 2784

电商框架-秒杀架构设计-上篇-设计理念

一、什么是秒杀 秒杀场景一般会在电商网站举行一些活动力度非常的活动(例如各大平台的强茅台,抢到就是赚到)或者节假日在12306网站上抢票。咱们重点聊一下电商秒杀的场景,对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户(包含专业黄牛)前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。 二、秒杀场景特征: 活动时,会有大量用户会在同一时间登陆页面进行抢购,网站瞬时流量激增; 秒杀的商品,设置的库存一般比较少,所以只有部分幸运的.

撸起袖子加油干 657

Weaviate核心组件剖析:模块化架构设计理念

在当今数据驱动的时代,传统数据库架构已无法满足AI应用对高性能向量搜索、灵活扩展和云原生部署的需求。Weaviate作为一款开源的向量数据库,通过其创新的模块化架构设计,成功解决了这一痛点。本文将深入剖析Weaviate的核心组件架构,揭示其模块化设计的精髓。 读完本文,您将获得: - Weaviate模块化架构的完整蓝图 - 核心组件间的协同工作机制 - 模块化设计带来的技术优势 - 实际部署...

gitblog_00747的博客 797

三层架构设计理念

1、持久层:完成内存数据和磁盘数据的转换,设计原则,一个实体类,一个持久接口,一次数据库操作,一个持久方法 2、业务层:完成业务处理,将表现层提供数据处理后,交由持久层完成数据的保存,设计原则,一个实体类,一个业务接口,一次提交一个业务方法 3、表现层:完成数据的提供和数据的展示,并完成流程的控制,设计原则,采用MVC模式 M:模型也就是实体类,用于数据的封装和数据的传输。 V:视图也就是...

weixin_34342905的博客 345

xmrig开发者访谈:项目架构设计理念

XMRig作为高性能跨平台计算软件的代表,其架构设计始终围绕"性能优先、模块化扩展、跨平台兼容"三大核心原则。本文通过虚拟访谈形式,深入解析项目从单一CPU计算工具到支持多算法、多硬件后端的架构演进历程,揭示其在代码组织、性能优化与可扩展性方面的设计哲学。 ## 核心架构:分层设计与依赖注入 XMRig采用清晰的分层架构,通过依赖注入实现模块解耦。核心架构分为五层: ```mermaid f...

gitblog_00364的博客 954

HDFS架构设计理念以及优缺点

可以快速实现大规模数据的分布式存储开发,以及分布式程序的快速开发,利用集群的威力进行大数据的高速存储和运算。HDFS 的设计理念来源于非常朴素的思想∶即当数据文件的大小超过单台计算机的存储能力时,就有必要将数据文件切分并存储到由若干台计算机组成的集群中,这些计算机通过网络进行连接,而HDFS 作为一个抽象层架构在集群网络之上,对外提供统一的文件管理功能,对于用户来说感觉像在操作一台计算机一样,根本感受不到 HDFS 底层的多台计算机,而且 HDFS 还能够很好地容忍节点故障且不丢失任何数据。

m0_60258751的博客 848
上一篇: Mercury:唯品会全链路应用监控系统解决方案详解(含PPT)
下一篇: dedecms动静态分离
sherry2016
博客等级 码龄19年 31粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值