分布式系统了的一些看法

分布式系统架构设计之分布式系统实践案例和未来展望 分布式系统在过去的几十年里经历了长足的发展,从最初的简单分布式架构到今天的微服务、云原生等先进架构,取得了丰硕的成果。本文将通过实际案例分享分布式系统的架构实践,并展望未来可能的发展方向。 阅读详情

前言

过去两个月深入的参与了一个分布式系统的开发,记得之前有人说过“想成为架构师之前,都是从微观架构开始的”。尽管我从没想过将来的某一天要成为一个架构师,或者领域专家,我只是想萌萌哒的编码,写着自己喜欢的Code,和一群志同道合的朋友做出大家喜欢的商品和产品。但是工作久了慢慢的搭架子的事情还是会来到你的面前,因为时间总会把一部分人慢慢推向海边,使得他们成为最早见到阳光的人。

不扯淡了,为什么要说阳光呢,还是因为过去的两(三)个月可能过的太充实也太痛苦了,完成之后,曙光来临的时候整个人是会发光的哦。“深度”参与是因为我终于有机会在搭架子的过程中有了话语权和选择权,同时也会承担70%以上的编码工作。

之前我的自我认知是我可能在软件方面的积累还可以,比如设计模式,架构分层,程序解耦,API入手等方面,但是总觉得我在硬件网络方面积累的太少,太薄了。

比如:

  • 不同操纵系统之间的特点;
  • 网络端口管理与分发;
  • 哪些网络协议可以帮助我们更好的完成工作,监控虚拟机的时候是在虚机上加代理好还是用协议去控制;
  • 硬件是否支持分布式,在扩展过程中对于.net C#的兼容怎么样;
  • 什么时候使用多线程,在把线程交给程序调度的时候我们怎么控制和捕捉线程的异常;
  • 日志系统对于整个分散的系统是多么的重要;
  • 何时使用关系数据库,什么时候使用Nosql;
  • 消息队列用擅长的MSMQ还是RabbitMQ.
  • 怎样有效的和其他部门的同事沟通;
  • 用什么样的方式去有效调度不同语言开发的系统;
  • 测试用例对于大系统从零散到完整是多么的重要;
  • 系统标准,代码原则对于后期的维护余扩展是多么的重要;
  • 等;

项目简介

首先项目详细内容不便多说,简答的说,就是为国内某大型厂商建立一套协调其自身搭建的私有云以及其购买的公有云的一套系统。说牛X一点就是:一套混合云系统。

使用Restful

这是在构建完整个系统最大的收获,之前使用web api的经验只是为电商系统的移动终端提供数据交互的接口,但是在这次项目之后发现Rest接口的不仅作为我们系统向外部系统提供交互的方式,同时在一些开源工具其暴露出来的接口也是基于rest的,可见全世界的程序员对于json对于rest有多么的喜爱;

为什么装上软件配置完成之后使用不了

之前的开发经验由于使用的都是微软的技术包括组建,工具。但是在项目中使用一些开源工具之后,配置成功之后却总也跑不起来,同时由于开源工具已将Exception封装起来,我们很难知道具体是什么样的问题,有的时候调试好久还是跑不起来,很沮丧也很懊恼,结果最后发现是由于公司IT只是将常用的端口打开,其他的都干掉了,如果申请开放端口的话还要走流程,于是对于开发人员有时候有一台外网的开发虚拟机也是相当的有必要的。

使用RabbitMq

个人是非常的喜欢使用Mq的,之前做电商总喜欢在Application层下面放入一层Service,你可以不用但是总会强迫症似的不去不写。为什么不用Msmq呢,原因是有很多了,简单点就是rabbit要比Msmq的协议更加高级,支持的处理功能也更加丰富,最重要的原因是Rabbit在开源语言使用上是占领先地位的,而且我们的系统又要嫁接太多的开源语言系统,最后只能适配他们喽。

之前知道Mq在企业系统间数据交互使用频繁,不但能有效的划分层次,解耦依赖,同时数据交互方式上也相当的便捷。总会有消息没有被消费者使用,那我们就需要程序异步的去处理这个消息队列了。

Redis

系统中使用了三种数据存储,MySql,SqlServer,Redis,当然前两种适用于开源和C#,而Redis的使用则是为了那些总是难以找到有效关系和依赖的数据,比如之前只是知道Reids可以作为数据的存储,可以分布式,可以主从复制,但是在这次开发之后更真真的发现Reids或者Nosql对于一个数据规则难以掌握,数据量大的系统是多么的重要,因为有的时候一批的Json串过来之后,难以有效的挖出里面的关系与逻辑,索性就一次性将他们放入Redis中吧,使用时再反序列吧。同时建立读写分离的原则,我们主要将读放在了Redis里面,写到了Mysql,并通过Mysql的触发器实现服务器段数据的主从复制同步。

日志系统

之前我们的单一系统的时候,比如只是简单的3层架构的话,我们通过Debug可以从头debug到数据库,每一步都是掌握在手底下,每一步都尽收眼底。可是对于这一个层次太深,组建调用较多,同时又是多线程的系统来说,挖到雷的机会,时间,成本都是要考虑的。于是有效的使用日志组件,有效的在代码中埋雷就显的尤为迫切和必要,能够更好的帮助我们找到问题所在。

组件式开发

之前的简单分层系统我们通过Svn或其他的代码管理工具,每次提交都可以Merge看的到,但是当系统庞杂同时系统独立性很强的时候,分组建,分模块开发就显得很重要。因为不想浪费大家一起Merge的时间,我们习惯性每个人有自己的Branch每周2的时候提交代码,大家一起参与,这样减少了好多因为代码管理浪费的时间。

测试用例

之前小的系统使用测试用例基本就是装B用的,本来小小的系统整套流程脑子一想就可以知道怎么做啦,为什么还要浪费时间。可是在这次开发中充分理解了测试用例的重要性。比如我需要你给我提供多台服务器的监控数据包括CPU信息,IO信息,NEt信息等等,但是你还没有想到怎么样去抓取虚拟信息,不能因为你的问题去影响其他人的进度的,最好的方式从使用者角度获知他希望使用什么样的数据,为其建立API,同时为API建立测试用例并保证测试稳定。而后期我有了监控虚机的方式之后我在建立对应的适配方法适配到对应的API上。

所以首先肯定要保证API的稳定,因为他之上的东西已经稳定了吗,你只好辛苦啦,有效的测试用例可以帮助我们更好的剥离项目逻辑与协调组件系统。

编码原则

这个主要是每周有时间大家一起参与Code Review,由于开发人员的能力不同资历不同,所以总会在代码的编写上和建立出现太多的不统一。比如命名啦,变量声明啦,有的时候会发现刚毕业的小朋友会将好多的私有变量放在类的顶部,同时一个类里写太多的方法,而且有的方法好长,还没有注释。于是有的时候你想了解一个方法的真正含义,要鼠标各种滚动,到变量声明去了解真正用途,好烦的。

有的时候代码的职责不明确,总是瀑布的思想方式去写代码,比如我们两个功能:一个是发送API请求建立虚拟机,另一个是在虚拟机建立成功时候将操作Log写入db。他们习惯性的将写DB的逻辑放在了发送HTTPRequst的方法里面,这完全是两个逻辑。另一个问题是由于创建虚拟机是需要时间的,同时尽管虚拟机操作成功有可能你写DB的时候网络原因DB失败了。我认为这应该是个原子的操作,两者的状态必须统一,就像是你在手机充值的时候显示银行卡扣金额成功,可是手机充值是出现问题,钱不是白花了吗。所以在这些有特殊逻辑的地方要建立特殊的统一的机制,不能每个人有各自的实现。

之后就是沟通了

由于项目涉及到多个项目组,我们并不是同一个部门,相互也不熟悉,所以沟通上就会有一些需要注意的。首先要了解“对手”,主要是因为如果对方是个技术高手,你不能像个白痴小孩,要有所准备,最起码知道他们用什么开发语言,他们需要关注的业务逻辑,等等,不能让他们得到你是个菜鸟的结论。

由于口头的好多东西可能是没有经过检验的东西,所以前几次达成的协议我们只是做个参考,需要多次沟通之后才能确定结果,比如我们的项目中我们需要和Python组Java组协调消息接口,消息格式的时候。你要知道协调RabbitMQ时候我们需要定义下交互的Exchange,queue name 或者RoteKey等等,同时由于消息格式比较大,需要定义一些关键字或者预设字段的话,需要发邮件进行确认与沟通,避免开发过程中产生误会影响完成的功能返工。

总之这次搭架子的过程收获很多,一时半会也不能想的全面,以后慢慢聊,由于是第一次资历尚浅,好多的技术选型,问题考虑可能不成熟,也希望大家知道更多的能够纠错指导。

下面就说一些我们在架构中使用的一些东西:

开发语言:C#,java,Python;

数据存储:缓存,文件(xml),MSsql,Mysql,Redis;

数据交互:rest,json,RabbitMq;

操作系统:ubuntu,windows;

虚拟机监控:zabbix;

搜索:solr;

多线程,多层架构,模块式开发,组件式开发;

《深入理解分布式系统》之认识分布式系统 阅读详情

相关推荐

分布式系统之一:分布式系统的挑战

本博文主要介绍分布式系统的特征、应用与挑战(参考Distributed Systems Concepts and Design) 博主曾经在国内某电子商务公司的终面里面遇到了关于分布式系统的问题(因为我的简历上写明了我熟悉分布式系统),于是面试官很慈祥的问了我什么是分布式系统、cap理论、应用场景等。从面试官的言情看得出来他很不满意,博主也很是失望。只想告诫大家:一个项目并不代表你对着一个方向

Evan的开源之旅 5252

Java同学找工作最懵圈的问题:到底啥是分布式系统开发经验?

目录 1、从单块系统说起 2、团队越来越大,业务越来越复杂 3、分布式出现:庞大系统分而治之 4、分布式系统所带来的技术问题 5、一句话总结:什么是分布式系统设计和开发经验 6、补充说明:中间件系统及大数据系统 前言 现在有很多Java技术方向的同学在找工作的时候,肯定都会去招聘网站上找职位投递简历。 但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设计和开发,具...

D.K专栏 2776

Java同学找工作最懵圈的问题:到底啥是分布式系统开发经验?(推荐)

主要介绍了分布式系统开发经验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

分布式系统 并不是我想象中的那样

分布式系统 并不是我想象中的那样

1030

从零构建Carsim线控转向仿真:模型搭建、算法集成与整车联动实战

本文详细介绍了从零开始基于Carsim和Simulink搭建线控转向仿真模型的完整实战流程。内容涵盖RWA前轮执行器动力学建模与PID控制、卡尔曼滤波器估算齿条力、HWA方向盘手感模拟算法设计,以及最终实现HWA与RWA闭环联动并进行整车仿真调试。通过分步拆解,帮助读者深入理解线控转向系统的核心原理与工程实现。

weixin_29158413的博客 251

Homebrew 必备软件清单:我的 macOS 开发环境搭建全记录

本文详细介绍了如何使用Homebrew在macOS上搭建高效的开发环境,包括基础配置、核心开发工具链、高效编码工具集等30个必备工具。通过Homebrew这一macOS缺失的包管理器,开发者可以一键安装命令行工具和GUI应用,大幅提升工作效率。文章还提供了日常维护命令和疑难问题解决方案,适合从新手到资深开发者的所有用户。

weixin_28836507的博客 353

到底啥是分布式系统开发经验?

  现在有很多Java技术方向的同学在找工作的时候,肯定都会去招聘网站上找职位投递简历。   但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设计和开发,具备复杂分布式系统构建经验。   这个分布式系统的设计和开发经验,到底指的是什么?那么这篇文章就给大家来解释一下这个问题。   1.从单块系统说起   要说分布式系统是什么东西,那么就得先从单块系统开始说起。  ...

qianfeng_dashuju的博客 1397

DRM驱动代码分析:展频 跳频

DRM驱动代码分析:展频 跳频

yuuu_cheer的博客 2673

面试官:小伙子,说说你对分布式系统原理的看法吧

1 概念 1.1 模型 1.2 副本 1.3 衡量分布式系统的指标 2 分布式系统原理 2.1 数据分布方式 2.2 基本副本协议 2.3 Lease 机制 2.4 Quorum 机制 2.5 日志技术 2.6 两阶段提交协议 2.7 MVCC 2.8 Paxos协议 2.9 CAP 1 概念 1.1 模型 节点 在具体的工程项目中,一个节点往往是一个操作系统上的进程。在本文的模型中,认为节点是一个完整的、不可分的整体,如果某个程序进程实际上由若干..

欢迎您访问我的公众号【前程有光】 288

如何使用obspy下载地震波形数据

如果你是地震研究学者,或者需要进行地震方面的研究,那么地震数据下载是一个必不可少的流程,本文将告诉你如何使用obspy下载想要的地震数据

monsterk1的博客 2074

高效静音黑科技 —— 单相直流无刷电机驱动器

然而,传统的BLDC电机驱动通常依赖于三相架构,电路复杂,成本高昂,且在低功率应用中显得有些“大材小用”。单相直流无刷电机驱动器作为一项高效、静音、经济的技术,正逐渐改变着各个领域的电机驱动方式。其精巧的控制策略、显著的优势以及广阔的应用前景,都预示着这项技术将在未来扮演越来越重要的角色。它相较于传统的三相驱动,显著简化了电路结构,降低了成本,尤其适用于低功率、对静音要求极高的应用场景。通过这些模块的协同工作,单相直流无刷电机驱动器能够实现对电机速度、扭矩的精确控制,并最大程度地降低噪声和振动。

wen8789的博客 1763

如何认识分布式系统

写这篇文章之前,给文章起标题想了很久。首先,我想写的不是介绍任何一个商用或开源的分布式系统,这种文章网上太多的教程了,而且质量很高,我觉得我无法写出更好的,也没有这个必要。如果起名叫分布式系统概述之类,感觉题目就太大了,我现在还没有这样的层次去对某一个技术方向去“概述”。所以思来想去呢,给的标题是--如何认识分布式系统。某种程度上就是我本人怎么来认识和理解分布式系统的一个过程,使用一篇文章将其记录...

新兴IT民工的专栏 1万+

即插即用系列(代码实践) | WACV 2024 CSAM:面向各向异性医学图像分割的 2.5D 跨切片注意力模块

文章摘要: 论文《CSAM: A 2.5D Cross-Slice Attention Module for Anisotropic Volumetric Medical Image Segmentation》提出了一种解决医学图像各向异性问题的创新模块CSAM。针对MRI/CT数据中切片间分辨率差异大的挑战,该模块通过2.5D跨切片注意力机制,结合2D卷积的轻量性和3D上下文感知能力。核心包括语义注意力(通道级)、位置注意力(空间级)和跨切片注意力(支持不确定性建模),能在几乎不增加参数量的情况下有效捕捉

分享顶会顶刊论文即插即用模块 104

到底什么是分布式系统,该如何学习

点击上方“互扯程序”,选择“置顶公众号”优秀文章,第一时间送达!KSKnowledge Sharing知识分享    现在是资源共享的时代,同样也是知识分享的时代,如果你...

互扯程序的博客 5378

2025年CSP-X初赛真题及答案解析(江西)(完善程序第1题)

2025年CSP-X初赛真题及答案解析(江西)(完善程序第1题)

王老师青少年编程 713

【IoT】压力式电子脉搏器设计

智能硬件

产品线负责人 1618

什么是分布式系统

一、三个步骤完成华丽转身——任意软件变为“分布式”分布式——一个高大上的名词,是计算机软件设计中人民群众喜闻乐见的“逼格满满”、“不明觉厉”的几个名词之一。但很可惜,这玩意儿一点也不复杂,甚至有些“简单”。不信?你只要遵循下述步骤即可将任何一个软件拆分为“分布式”的:将你的整个软件视为一个系统(不管它有多复杂)将整个系统分割为一系列的 Process(进程), 每个 Process 完成一定的功能...

mazhaer的博客 260

计算机控制技术及应用

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

对分布式系统的简单理解

分布式系统 分布式系统就是一个系统拆分成多个子系统并分别部署到不同的服务器节点上,而一致组合起来对外提供服务的系统 由多个计算机节点组成,各节点通过网络连接进行通信。 为什么使用分布式系统 增大系统容量 加强系统可用性(单体架构易发生单点故障) 系统模块化重用度高 软件服务被拆分,开发,发布速度快 扩展性高 分布式系统的优缺点 优点: 资源共享:若干节点通过网络互连,一个节点上...

baidu_39240038的博客 921

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

我对Java分布式系统的一点认识

相对于单机系统,分布式系统非常复杂,涉及到非常多的技术,作为一个屌丝,有幸能够在大规模分布式系统下工作,故在此记录一些浅薄认识,作为自己未来学习路线的参考。   一、分布式系统概述   分布式系统往往是把应用拆分成多个应用,每个团队维护一个应用,应用与应用通过远程过程调用或者消息中间件通信。这种系统的优点是能够做到高内聚低耦合,可以支撑业务的快速发展,缺点则是运维成本大大提高了

1157

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

到底什么是分布式系统?你需要了解这些

摘要:什么是分布式系统?为什么要用分布式系统?分布式系统如何分布?这些你知道吗? 小引 分布式系统是一个古老而宽泛的话题,而近几年因为 “大数据” 概念的兴起,又焕发出了新的青春与活力。本文将会通过对如下几个问题展开谈一下分布式系统: 什么是分布式系统? 为什么要用分布式系统? 分布式系统设计推演 CAP定理是什么? 分布式系统如何进行分布? 分布式应用通常使用的架构类型哪些? 分布式系统的优缺点有哪些? 1. 什么是分布式系统? 简单的来说,一个分布...

华为云官方博客 1万+

什么是分布式系统,如何学习分布式系统

在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是需要存储的。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片(。对于计算,那么就是对计算任务进行切换,每个节点算一些,最终汇总就行了,这就是MapReduce的思想;

2401_85123579的博客 3546

什么是分布式系统!以及分布式系统架构的优缺点!

现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。那什么是分布式系统?分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文...

OnTheRoad的博客 7万+

[分布式系统]全面介绍分布式系统

[分布式系统]全面介绍分布式系统 [声明:本篇文章翻译转载自Stanislav Kozlovski] :A Thorough Introduction to Distributed Systems。 很感谢原作者这么通俗易懂介绍分布式系统。考虑在国内访问不到该作者的文章,以及自己学习的便利性,想在这里和大家分享一下 Stanislav Kozlovski 作者的文章。 什么是分布式系统...

咸鱼的梦想专栏 4453
上一篇: 大型网站运维需要干的那些事
下一篇: ActiveMQ
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值