首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏架构之家

    大型复杂系统架构设计思考

    1、 大型系统和简单系统设计有什么区别? 2、 大型系统设计不就是分布式设计吗? 3、 如何进行大型系统设计? 二、大型系统与简单系统设计区别 从系统简易程度可以将系统分为复杂系统或简单系统。 我们这里成复杂系统为大型系统,大型系统复杂系统,一般是指规模大、复杂度高系统。而简单系统是指规模小,复杂度也不高系统,一般是单体,也可能是分布式架构简单系统。 分布式系统,微服务架构都是“分而治之”思想体现。事物是变化,深一点讲,如果掌握了事物本质,自然不必为问题而烦恼了。 一般系统设计,需要考虑几个层面,1是业务层面,2是系统层面,3是技术层面。 4.1 大型系统设计步骤 大型复杂系统设计不是一开始就进行架构设计,核心也不完全是分布式技术架构。而是要从业务开始,进行逐步设计过程。 (3)分析业务需要支撑功能和服务,将功能和服务分配到组件和应用,设计应用之间交互和协作。

    1.2K20编辑于 2022-07-12
  • 来自专栏肉眼品世界

    系统设计之降低复杂

    3)未知未知 复杂第三个症状是,必须修改哪些代码才能完成任务,或者开发人员必须获得哪些信息才能成功地执行任务,这些都是不明显3、小结 复杂三种表现形式中,未知未知是最糟糕。 三、复杂原因 复杂性是由两件事引起:依赖性和模糊性。 1、依赖关系 依赖关系是软件基本组成部分,不能完全消除。实际上,我们在软件设计过程中有意引入了依赖性。 3、依赖性和模糊性积累 复杂性不是由单个灾难性错误引起;它堆积成许多小块。单个依赖项或模糊性本身不太可能显着影响软件系统可维护性。 2、模块设计 开发一个新模块,如果有不可避免复杂性。两种设计思路哪个更好:1、应该让模块用户处理复杂性,2、应该在模块内部处理复杂性? 模块是设计应该是深,最好模块是那些其接口比其实现简单得多模块。这样模块具有两个优点。1、一个简单接口可以将模块强加于系统其余部分复杂性降至最低。

    1K40发布于 2021-01-06
  • 来自专栏Tom弹架构

    使用桥接模式设计复杂消息系统

    本文节选自《设计模式就该这样学》 举个例子,我们在平时办公时候经常通过邮件消息、短信消息或者系统内消息与同事进行沟通。尤其在走一些审批流程时候,我们需要记录这些过程以备查。 根据类型来划分,消息可以分为邮件消息、短信消息和系统内消息。但是,根据紧急程度来划分,消息可以分为普通消息、加急消息和特急消息。显然,整个消息系统可以划分为两个维度,如下图所示。 [file] 如果我们用继承,则情况就复杂了,而且也不利于扩展。邮件消息可以是普通,也可以是加急;短信消息可以是普通,也可以是加急。下面我们用桥接模式来解决这个问题。 /** * 实现消息发送统一接口 */ public interface IMessage { //要发送消息内容和接收人 void send(String message, 关注微信公众号『 Tom弹架构 』回复“设计模式”可获取完整源码。 【推荐】Tom弹架构:30个设计模式真实案例(附源码),挑战年薪60W不是梦 本文为“Tom弹架构”原创,转载请注明出处。

    90530发布于 2021-11-08
  • 来自专栏Tom弹架构

    使用桥接模式设计复杂消息系统

    本文节选自《设计模式就该这样学》 举个例子,我们在平时办公时候经常通过邮件消息、短信消息或者系统内消息与同事进行沟通。尤其在走一些审批流程时候,我们需要记录这些过程以备查。 根据类型来划分,消息可以分为邮件消息、短信消息和系统内消息。但是,根据紧急程度来划分,消息可以分为普通消息、加急消息和特急消息。显然,整个消息系统可以划分为两个维度,如下图所示。 如果我们用继承,则情况就复杂了,而且也不利于扩展。邮件消息可以是普通,也可以是加急;短信消息可以是普通,也可以是加急。下面我们用桥接模式来解决这个问题。 /** * 实现消息发送统一接口 */ public interface IMessage { //要发送消息内容和接收人 void send(String message, public Object watch(String messageId) { //根据给出消息编码(messageId)查询消息处理状态 //组织成监控处理状态

    73420编辑于 2021-12-21
  • 来自专栏物流IT圈

    通用设计:指挥调度系统——复杂行动大脑与神经

    应用场景 该系统应用场景多出现在:需要多维时空信息用于决策;多人参与;人员动作需及时根据态势进行调整。如火灾、地震、海啸救援,危爆品事件处理,海上营救,群体事件处理等复杂场景。 设计目的 主要用于重大事件行动、复杂情况处置等情景推演及调度,包括训练情境及实际指挥情境。运用信息化手段辅助组织实施和控制演练,为行动方法研究、行动方案预案推演提供手段。 该系统具备如下功能: 1)行动态势图定制和自动生成功能; 2)态势信息融合功能; 3)态势协同功能; 4)信息查询功能 5)加载其他系统信息功能等。 3. 显示系统涉及关键技术包括显示系统与其他系统接口设计,态势动态表现技术,通用地图接口和图元接口设计,行动态势多角度、多方式输出和表现技术。 10. (3) 调度指挥中心将评估方案及评价规则录入综合演练评估评定管理系统,作为演练结束后评价分析依据。

    1.4K30发布于 2020-07-16
  • 软件设计哲学-软件系统复杂性问题

    今天继续和大家推荐和导读《软件设计哲学》这本经典书籍。 这本书深入探讨了如何通过高内聚低耦合、分层抽象等设计方法有效降低软件系统复杂性,适合所有软件开发人员阅读。 核心要点 软件系统复杂性主要由依赖性和模糊性引起,其中依赖性问题更难解决。 模块设计应追求深度,即隐藏内部复杂性,对外暴露简单接口,尤其是通用模块。 在导读之前,我想先说明这本书受众群体。根据我阅读体验,这本书适合所有从事软件开发的人员阅读,无论是编码工程师还是系统设计师,都能从中获得启发。 本书核心主题是探讨软件系统复杂性问题。 若拆分过于粗略,则难以应对系统复杂性;若拆分过于细致,模块间集成和依赖又会加剧这种复杂性。因此,这成为一个两难问题,解决起来颇具挑战性。 在概述复杂性之后,本书正式进入软件设计哲学内容。 软件复杂性=业务*技术*治理 基于这两本经典书籍对软件系统复杂分析和阐述,我个人理解是,我们应该从三个重要维度去理解软件系统复杂性:业务复杂性、技术复杂性、上线以后管控治理复杂性。

    22210编辑于 2025-11-17
  • 来自专栏Android开发指南

    3.复杂viewpager

    实现这样效果: 1.主页面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools android:button">@null</item>//写成null,RadioButton就没有点只有文字了 <item name="android:drawablePadding">3dp mViewPager.setCurrentItem(2, false);// 设置当前页面 break; case R.id.rb_gov: mViewPager.setCurrentItem(3, { @Override public void onPageSelected(int arg0) { mPagerList.get(arg0).initData();// 获取当前被选中页面 return */ public NewsCenterPager getNewsCenterPager() { return (NewsCenterPager) mPagerList.get(1); }} 3.

    93390发布于 2018-05-14
  • 来自专栏Android开发指南

    3.复杂viewpager

    实现这样效果: 1.主页面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns: android:button">@null</item>//写成null,RadioButton就没有点只有文字了 <item name="android:drawablePadding">3dp mViewPager.setCurrentItem(2, false);// 设置当前页面 break; case R.id.rb_gov: mViewPager.setCurrentItem(3, { @Override public void onPageSelected(int arg0) { mPagerList.get(arg0).initData();// 获取当前被选中页面 return */ public NewsCenterPager getNewsCenterPager() { return (NewsCenterPager) mPagerList.get(1); }} 3.

    43610编辑于 2022-01-12
  • 来自专栏野生AI架构师

    复杂场景下用户与权限系统设计思考与实践

    最近参与一个项目的架构设计,及提供技术指导,发现其用户体系相当复杂,之前自己设计显然想简单了。其大概要点如下: 1. 这个系统用户包括一千多所学校学生、家长、校长、校医、主管部门工作人员、领导、第三方机构工作人员等; 2. 一个学生可以被多个家长绑定,一个家长也可以绑定多个学生; 3. 低估复杂性 之前设计时候,有些问题考虑是不够: 开始时漏考虑了一个角色:普通微信用户。 复杂性在于后续该用户可以和学生进行绑定,这时他角色就可能会转换成学生或者家长等,可能需要对账号进行合并,因为原来学生账号本来就是预先生成在系统,如果是家长则需要对账号类似进行转换。 问题产生原因与教训 开发与架构设计沟通不够:这个可能是主要原因,架构在前面很难把所有细节都考虑到,特别是系统比较复杂时候,这时舒畅沟通机制就很重要,特别是跨团队时候,有周例会对齐认知很重要;

    57410编辑于 2023-08-26
  • 来自专栏magicodes

    EXT.NET复杂布局(四)——系统首页设计(下)

    var addTab = function (id, url, title) { 2: var tab = tplCenter.getComponent(id); 3: 页3', true); } 这里显示是我测试页,你可以在这里显示自定义页面,并且可以传递工作台中面板中Json数据。 在这里,我在工作台也添加了一个弹出窗口JS函数,这么做原因是,从这里打开窗口处理完事项,我可以刷新工作台数据,甚至是指定面板数据,也就是在beforedestroy事件中,reload相应store 至于其他代码,我就不多介绍了,篇幅有限,精力有限。 工作台代码,其他篇幅有部分介绍,可以参考EXT.NET复杂布局(一)——工作台。 ; 关于表单一些介绍,请看EXT.NET复杂布局(三)——复杂表单布局。 尾声 从使用EXT.NET到现在,也差不多一年了,真正使用时间也只有几个月而已。现在回想起来,还是感慨良多。

    2.3K20发布于 2018-12-27
  • 来自专栏magicodes

    EXT.NET复杂布局(四)——系统首页设计(上)

    很久没有发帖了,很是惭愧,因此给各位使用EXT.NET朋友献上一份礼物。 本篇主要讲述页面设计与效果,下篇将讲述编码并提供源码下载。 系统首页设计往往是个难点,因为往往要考虑以下因素: 重要通知 系统功能菜单 快捷操作 日常维护工作(比如待办事项、已办事项等等) 用户信息(比如公司、部门、组织机构) 系统信息(意见反馈、帮助等) 联系沟通 等等 又要兼顾美观得体(丑了客户不愿意用,更别说钱了),方便实用,怎么从有限空间里显示更多功能(阵地战),往往弄得抓耳搔头,大费脑细胞。 下面就给出我方案。 页面效果 我申明下,我不是专业前端工程师,我就是一打杂(啥都搞下),所以不要期望过高,如果还过得去,请点推荐。不多说了,上图: ? ? 顶部面包和右侧面板没啥好说。接下来就说说功能吧。 左侧面板 左侧面板其实是相当重要一块,在平常系统设计中,往往把功能菜单放在左侧。这里类似。不仅支持分组折叠,还支持无限极子菜单,美观而灵活。 ?

    1.2K30发布于 2018-12-27
  • Go 语言设计天然不适合复杂业务系统抽象

    复杂业务系统(高变更频率、跨团队协作、强治理约束、复杂业务逻辑)里,Go 往往会把一部分“架构表达”成本转移到工程约定与组织治理上。 Go 在基础设施领域是一门非常有竞争力语言。 当你需要 Clean Architecture、DDD、Hexagonal、AOP、IoC 这类方法论来治理复杂系统时,Go 克制设计通常会让这些方法论更依赖约定与工具链,从而把成本更多推到团队与流程上 一个“系统抽象能力强语言”能让这些概念落在代码里,而不是停留在文档里。 Go 设计目标与架构表达取舍 Go 核心设计原则是简单、清晰、显式与快速编译。 结构信息密度很高,但代价是更陡峭学习曲线与更复杂类型设计,需要强工程能力来驾驭。 例如一个日志采集系统与一个复杂反欺诈系统面对工程难题完全不同。 前者关注性能与可维护性,后者关注规则可演进与架构可治理。

    16910编辑于 2026-01-29
  • 来自专栏ThoughtWorks

    复杂混沌微服务生产环境设计韧性系统

    面对复杂混沌生产环境,应该本着“不信有好事”原则来进行“明哲保身”式软件设计,并在生产环境中利用混沌猴以及在办公区进行僵尸来袭模拟混沌工程实践,来持续地主动揭示系统弱点,并加以改进,以提高系统韧性 “对于3个任意质量、初始位置和速度天体,只在牛顿万有引力定律作用下运动,那么能预测这3个天体运动情况吗?” 但当3个这样天体在一起互动时,运动轨迹却不可预测。 复杂生产环境,尤其是微服务系统生产环境,至少有3个各自独立通过了测试系统,它们各自通过事先定义好API实现通信。 在复杂和混沌系统中,我们要—— 专注于持续发现约束,而不是寻找根本原因 应对黑天鹅事件策略可以有3个: 承认无法预测黑天鹅; 增强个体抗打击能力; 设法利用试错来获利。 针对复杂和混沌微服务生产环境,我们可以使用下面的方法来设计系统韧性。 识别问题种类。使用“栖息地”框架来确定生产环境属于哪种问题。

    94320发布于 2019-09-16
  • 来自专栏图南科技

    复杂系统产品设计与开发

    有一天我在逛知识星球时候,看有人推荐《系统架构 复杂系统设计与开发》,于是买了实体书,读完后感觉很有价值。 抽象,复杂,难以理解同时,呈现出来是一套高屋建瓴方法论。 在产品设想,原型设计系统架构时候,首先我们想到是产品要满足什么样功能需求。 其次以什么样形式展现给用户,再者就是这样形式存在什么样关系和结构。 系统功能需要对外展示,也就是说,系统一条重要原则:功能与价值总是体现在系统边界处。 翻译过来,只有在跨界输出时,才能体现出最大价值。像 设计团队,只有在交付设计方案时,才能体现出价值。 结合工作场景,其实我们每天工作交流主要任务就是做这些事,避免信息分歧。 而团队管理者任务可以理解为 减少歧义,更新目标,管理复杂度。 ,它们是我们分析系统重要角度; 这篇文章分享关键词是 系统,功能,形式,涌现和复杂度信息歧义。

    76830编辑于 2022-04-15
  • 来自专栏架构精进之路

    解构复杂业务系统:架构设计核心逻辑与实践

    一、什么是复杂系统 我们经常提到复杂系统,那么到底什么是复杂系统。我们看下维基定义:复杂系统(英语:complex system),又称复合系统,是指由许多可能相互作用组成成分所组成系统。 八、复杂系统架构特点 1.重视功能拆解,模块化设计,原子化设计 复杂系统一定要进行细致功能、模块、领域划分。每个模块都应该有明确,单一职责。 这些不能一蹴而就,但是需要根据规划留有必要扩展,以使系统具有长期价值。 3.架构先行 对于复杂系统,已经不是一个或几个流程图能解决事情了。 我们知道复杂系统必然存在纷繁复杂依赖,依赖不可能存在于视图部分,肯定会表现为接口依赖。对于复杂系统,我们要强迫我们转换思维,强迫我们面向接口进行设计复杂系统架构设计不是一蹴而就,合适才是正确。希望本文能够对您在进行复杂系统设计时有一定参考意义。

    41120编辑于 2025-11-12
  • 来自专栏后端技术

    系统设计与分析 作业3

    在这个平台上可以比较轻松地设计和发布问卷,并查看统计结果。 比较需要花心思是问题设置,在设置某两道题选项时,花费了较多心思。 ; } }); 2.2 Restful理解,Restful 优缺点 参考 Restful理解,Restful 优缺点 我们知道restful是面向资源,但并不是任何场景都适合用restful 思想。 比如 批量删除数据,DELETE /tickets/12就不合适了 当查询操作参数过长时,GET也不合适,比如查询1000个订单信息,GET /tickets就得传一个长度为1000数组 对同一个事物不同属性进行更新 (虽然也能传递参数,但还是略显麻烦) 所以 简单查询尽量用GET,复杂查询和更新用POST,用最多; 不用PUT和DELETE,避免增加复杂度。

    67730发布于 2019-05-25
  • 来自专栏运维开发王义杰

    UML vs SysML:哪个更适合复杂系统架构设计

    引言 在面对一个由多个软件和中间件组成复杂系统时,传统UML(统一建模语言)可能显得有些局限。这时,我们可能会想,是否有更适合建模工具或方法?SysML(系统建模语言)是一个可能选项。 在这篇文章中,我们将探讨UML和SysML在处理这种复杂系统优缺点。 UML:软件建模标准 UML是业界广泛接受用于软件建模标准。 SysML:系统建模解决方案 SysML是一种扩展自UML建模语言,专为复杂系统(包括软件、硬件、人员、设备等)设计。它提供了一些额外图示元素和建模范例,专门用于处理系统问题。 因此,在做出选择时,以下几点值得考虑: 需求复杂性:如果你系统涉及多个软件、硬件和其他资源复杂交互,SysML可能更合适。 总结 当我们面对一个由多个软件和中间件组成复杂系统时,传统UML可能不再足够。SysML提供了一种更全面的建模方法,特别是在需要系统级视角和全面需求分析场景下。

    2.1K20编辑于 2023-09-19
  • 来自专栏学习成长指南

    复杂度(3

    1.二分查找时间复杂度 我们熟知二分查找绝对是一种很厉害算法,因为这个算法每进行一次都会砍掉一半数据,相当于是指数级增长,假设我们刚开始时候数据个数是N,我们计算时间复杂时候,要考虑到最坏情况 ,最后求得时间复杂度是O(2^N),当我们传递过去N是50时候,这个编译器计算就很费劲了,我们可以使用循环对这个算法进行改造; 下面的循环就是改造之后算法,我们这个时候时间复杂度就是O(N) 类型,都是有一定数据范围,都会造成越界风险,在后续C++里面,我们会使用大数算法解决这个越界问题(简单地说大数算法就是把我们很大数据转换为字符串进行运算); 3.空间复杂度 空间复杂度是算法计算需要额外开辟空间 ,算法本身某些空间是不包括在内,例如我们对于一个数组排序算法,我们这个数组是需要我们进行排序,这个数组空间并不是我们自己开辟空间,而是题目需要我们解决问题需要空间,这个时候数组占用空间不属于空间复杂计算范围 ; 因为现在计算机空间都比较大,所以我们一般不去考虑空间复杂度,但是某些情况还是会用到,我们那道经典轮转数组题目,我们之前介绍了三段逆置方法,我们其实还可以使用创建一个新数组,把后面的几个数据拷贝到前面

    12710编辑于 2025-02-24
  • 来自专栏明明如月的技术专栏

    理解复杂系统关键:耐心

    理解复杂系统关键:耐心 复杂系统本质上是多面的、复杂。它们通常并非被设计成一瞬间就能理解。这对于自然发生系统,如生态系统,和人类设计系统,如高级软件或机械,都是适用。 这些系统是由多个组件混合而成,每个组件都有其独特属性和角色。要理解整个系统,理解每个组件及其相互作用是至关重要。这个过程需要时间,因此,需要相当程度耐心。 理解复杂系统关键就是耐心。 其次,复杂性常常伴随着不可预测性。在复杂系统中,微小调整或变化可能会由于组件相互连接性而导致无法预见后果。这种特性,通常被称为"涌现行为"(系统复杂性超过其各部分总和),需要耐心和观察力。 草率结论或行动很容易导致对系统真实行为误解或误读。 耐心路线图 那么,如何培养这个关键技能呢?培养耐心需要改变思维方式,并有意识地接受学习旅程。 接受复杂性:第一步是接受系统固有复杂性。 总的来说,耐心在理解复杂系统过程中,不仅是一种美德,更是一种基本技能。它需要有意识培养和实践,但会带来深度理解和掌握丰富回报。

    30820编辑于 2023-08-02
  • 来自专栏全栈前端精选

    组件库设计实战 - 复杂组件设计

    这里我们提出一个组件复杂概念,一个组件复杂主要来源就是其自身状态,即组件自身需要维护多少个不依赖于外部输入状态。 这里逻辑并不复杂,但却带来了一个非常难以解决用户体验问题,那就是假设我们有 3 个轮播元素,每个轮播元素宽度都为 300px,即显示最后一个元素时,轨道 translateX 为 -600px, 至此,组件库设计实战系列文章也将告一段落。 在全部四篇文章中,我们分别讨论了组件库架构,组件分类,文档组织,国际化以及复杂组件设计这几个核心的话题,因笔者能力所限,其中自然有许多不足之处,烦请各位谅解。 组件库作为提升前端团队工作效率重中之重,花再多时间去研究它都不为过。再加上与设计团队对接,形成设计语言,与后端团队对接,统一数据结构,组件库也可以说是前端工程师在拓展自身工作领域上必经之路。

    1.2K10发布于 2019-09-29
领券