精华内容
下载资源
问答
  • 2019-12-01 17:47:16

            之前发表一篇软文《软件项目组织架构》的文章,提到了软件项目管理与软件企业组织管理及技术管理之间的关系,它们是存在交集的。也提到软件企业与一般的企业一样,组织结构存在三种方式项目型 矩阵形  和职能形组织。
    广意的组织是一个非常广的概述,包括非常多种组织类型,有正式的非正式组织,有企业型的有社会型的组织,有营利型也有公益型等。不过不管是什么组织都是为了实现某种 目标而设立的组织。组织管理是为了让组织高效运转,高效率达到目标的一系列管理工作,包括组织结构的设立,沟通、冲突处理,分工协作、组织变革等内容 。

           不同类型的企业有不同的组织方式。工程类企业,设计院 、研究所 、贸易公司、连锁机构等,不一而别,大有不同。一个原因就是如何让工作开展更高效,成本更低。而在本文中咱要说的是软件企业的组织架构。

            组织即是一个动词,也是一个名词,作为名词,组织是各有其职,有计划互相配合的一个集体,作为动词组织是这达到某些目标让一群人共同协作相互作用起来的过程。 组织管理是管理学和一门学科。

    组织管理学的发展
           组织的历史伴随着人类的历史存在,组织管理学也随着社会的发展不断提出新理论内容。早期的人类是群居的,为了获得食物或预防危险,大家生活在一起,有分工,有首领协调,这就是最早的组织。古代最早重视组织问题的是先秦思想荀子,在《荀子.王制篇》中明确提出了社会组织论的思想。“群而无分则争,争则乱,乱则离,离则弱,弱则不能胜物”提出要按每人特长分配给他们相应负责的事,做到人尽其才,各得其所。细歌认为中国又是发展组织最优秀最最强有利的国家,  在我国社会发展过程,不断有各种组织形式存在(因涉及到发布要求,这里不做相关列举),一些组织严密性和组织力度在全世界都非常罕见,除此还有各社会组织,也有一些自发性的组织,每一次起义,每一次革命都是从自发开始到自觉组织的过程。
         随着西方工业革命的出现,组织思想有了较大的发展,英国经济学家亚当.史密斯于1776年发表的《国民财富的性质和原因的研究》一书中,有过系统、出色的论述。他曾用做针的例子说明劳动分工的经济效益,提出了生产合理化的概念。而英国另一位出色的思想家欧文首先重视组织中的人事问题,认为工人是有生命的“机器 ”,更需加强保养,实行一系列福利措施,改善工人的劳动和生活备件,员工是可成为许多零件组成的一个系统,而英国剑桥大学教授巴奇在亚当.史密斯的分工研究基础上进一步对专业化问题进行深入研究。他认为劳动分工能带来更高生产系统方法的原因是:节省了学习所耗费的时间和材料,节省了变换工序 所耗费的时间和精力,促使技术熟练,加快工作进度。巴贝奇认为劳动分工不仅适合于体力劳动,且适合于脑力劳动。形成了古典管理学派遣的组织管理思想,包括科学管理和行政管理两个分派,注意分工协作 ,纪律,不受人的感情和人际关系因素影响。
    在大工业生产中,把人当机器的做法让工人们时起反抗,后来就出来的企业管理学,这里的组织管理研究重点处理人际关系和激励人。企业组织不仅是个技术-经济系统,而且是个社会系统,个人不仅受经济奖励的激励,而且有各种不同社会和心理因素的激励。人的行为受感情、情绪与态度的影响。非正式组织是研究重点。应对传统观念中的以组织的正式结构和职位为基础的领导模式实质性修正。人际关系学派一般认为,职工的满足感与生产率有联系,并强调指出,不断增加工人的满足感可以提高工作效率。等等。

            再后来,提出了系统学派的组织管理,系统学派组织理论强调应用系统的范畴、原理和方法,全面分析和研究企业的其它组织的管理活动、内部结构和模式,与外部环境的关系,建立起系统模型,更精确的对组织进行分析。

     

            系统学派的组织管理同时考虑到目标与价值、技术分工、组织结构、社会心理及外部环境。外部环境包括技术和经济的物理的人文的环境,这些都影响着组织方式。

     

            进入80年代后,世界新技术革命迅猛发展,国际交往不断扩大,全球能源、资源条件有了很大变化,各国政治、经济、社会变革此起彼伏,国际竞争越来越激烈,组织 环境日见复杂,这些都对现代组织管理理论提出了严峻的挑战。面对挑战,西方和日本等国的组织管理理论正从实践和理论两方面酝酿着重大的变动,成为一个活跃的、十分引人注目的领域。一些新出版的书可以看出。

       《寻求优势--一美国最成功的公司经验》一书,归纳了数10家成绩卓著的企业经验,力图证明美国人员并不比日本人差。这些企业共同特点是:重视行动;接近顾客 ,密切联系用户;发挥职工自主性和创新精神,注意造就大批革新能手和推销服务员,甘冒一定风险,允许 试验中的某些失败;依靠人来提高生产率;长期坚持 形成自己的企业文化;企业扩展不离开自己熟悉的行业,从不冒进自己不了解的经营,不进外行;结构从简,人员精干。

       《赢得优势--领导艺术较量》市场是一切经营活动的出发和归宿;市场的实质不只是一堆干巴巴的数字,首先是顾客,是用户,是有血有肉的人;不断创新,保持创新精神 ,避免官撩和僵化趋势;尊重职工,相信职工,发挥职工的积极性,实行以人为核心管理。一个企业必须有自己的明确指导思想、经营哲学、价值准则 、首选规范、文化传统、宗旨和信箱,能够用崇高的精神 力量吸引人、团结人、鼓舞人,在职工中形成共同的目标感、方向感、使命感,形成独具特点的企业文化。

     

          《Z理论》一书主张应当从日本成功经验中级取营养。威廉.大卫总结了日本文化中的三个根本性物质因素,即信任的态度,人们工作上、生活上的亲密关系,婉转、含蓄、细致的工作方式。这些物质使日本企业内部具有忠诚合作的精神和团队奋斗的目标一致性。

            当然,任何理论、思想和口号及引起的热潮,都是历史现象,都在一定的历史上发生、发展和消亡,不可能有绝对正确、普遍适用的理论、经验与方法。随着社会、经济科学技术的发展,人们对组织管理的规律认识将日见清晰,且要结合各国的具体国情,创立出具有不同特色的组织 管理理论体系。说到这里,我更想谈谈咱们国家的组织管理的发展,虽说专门的著书论说不多见,但把自己独特的组织思想和管理体系应用到实践中是无数多的成功案例,只是近代在企业经营中的组织管理落后于西方于日本,在政府、社会性组织方面,中国的组织体系是独特的优秀的,这里不相做例举。 与科学和制度化的管理相比,我国更有人制的管理,我们更多的是领导者而不仅仅是管理者。

    软件企业的组织架构
            回顾了组织管理学的内容,我们把说题回到软件企业的组织管理里来,软件企业是研发、生产、销售、运营软件产品及其曾值服务为经营活动动的企业。细歌的所学专业正是结合软件技术与管理学的专业, 从业软件行业10数年久,从小微创业公司到大型央企,从内资到外资企业。经任过的岗位从普通Programmer到CTO,从分析员到PM再到PMO,也曾眼见着一个初创团队成长成大公司的过程。多年从业经历让我了解了到软件企业应该如何进行组织构架的,并把这些认识写到文章里。

            从产品的角度看,与一般的产品性企业无二,需要研发团队 、需要市场团队、需要财务团队、需要其他内务团队,和一般的产品性企业最大的区别是没有生产,软件只需要研发,批产的活动就用复制替代了。按目前国内软件行业的市场情况,企业分型项目类和产品型两类。这里的软件指的是传统应用软件的企业,不包括互联网企业,不过在IT技术领域,互联网产品和软件产品是很难清晰的分出边界的,也许针对互联网企业的组织构架可以专门写一章,也可以和软件企业放一起介绍。

            项目类软件企业中,一类是外包定制开发企业,比较典型的在国内有中软国际、文思海辉、东软等企业,另一类是行业解决方案类,这类是基于自有软件产品围绕某个行业做信息化智能化解决方案,比如ESRI Arcgis应用在国土、交通的解决方案,SAP应用在制造企业的ERP解决方案,Project、 P6等应用在工程管理的解决方案,这是国际知名的行业软件,在国内很大多数软件企业都深耕和依附于某一行业,他们对行业业务十分熟悉。第三类是纯粹的软件产品销售企业,通用型或专业型软件售给使用企业,获得收益,还有一类是业务类软件售给中小软件后在实施企业进行二次开发或实施,一实企业通过购入知名成熟软件产品代理权,在客户单位进行定制实施开发。

            软件产品型企业中一类是按产品线组织 ,一类是按业务领域组织,当然项目型企业也不例外。项目型软件主要按业务领域划分的部门,然后业务围绕项目运作,核心的组织单元就是项目团队,见细歌文章《软件项目组织架构》,另一块核心团队就是市场团队,对外承接项目业务,其它组织单元都是服务项目团队,包括质保、测试、技术支持、项目管理、商务、内务等组织单元。
            产品型软件企业核心组织单元是产品团队,其次是产品运营推广团队。其它组织单元都是围绕产品运作设定的,如产品服务部,技术支持部,测试部。软件产品不像一般实物类产品,没有生产环节,只有研发和市场推广环节,生产即是复制,也不像服务类产品,他有研发环节,而服务类产品只有策划和市场推广。

            除企业性质和企业经营方向外,企业规模也是企业组织方式的主要考虑因素。企业规划越大,组织越细分。小微企业几人管所有,大型集团化企业每个技术点都有一个团队来完成。软件按技术原则划分的话,营销、产品、售前、项目、架构设计、开发、测试、QC、运维、客服这些都是需要的。

     

    表:典型的项目型软件公司组织结构

    市场总监

    区域经理

    销售经理1、销售经理2

    区域经理

    销售经理、销售经理2

    技术总监

    技术(研发)一部

    架构设计岗、前端开岗、后端开发岗、数据处理、测试岗。

    技术(研发)2部

    架构设计岗、前端开岗、后端开发岗、数据处理、测试岗

    运维部

    网管 、系统管理员 、系统培训员、实施员。

    项目总监

    项目组1

    项目经理、售前、需求、架构、开发、测试、运维

    项目组2

    项目经理、售前、需求 、架构、开发、测试、运维

    项目组n

    项目经理、售前、架构、开发、测试、运维

    综合管理

    商务

    负责项目招投标处理、接待等。

    行政

     

    财务

     

    美工设计

     

     

    图:矩阵式组织图

     

    表:,典型的产品型软件公司结构

    运营总监

    招商经理

    销售经理1、销售经理2

    品牌经理

    销售经理、销售经理2

    技术总监

    技术经理

    架构设计岗、前端开岗、后端开发岗、数据处理、测试岗。

    技术经理

    架构设计岗、前端开岗、后端开发岗、数据处理、测试岗

    产品经理

    需求分析、美工、UI。

    综合管理

    商务

    负责项目招投标处理、接待等。

    行政

     

    财务

     

     

    表:典型的几种技术岗位及其职责

    其中系统分析师和系统架构师的工作区别见细歌文章《系统分析师和系统架构师大PK》, 项目经理与产品经理的工作别见文章《项目经理与产品经理区别》

          以上是典型的软件企业主要技术岗位项目,企业的规模是组织人员配置的决定素之一,但不管规模大小,都有以上的岗位职责表在,只是小微公司因为人员少,就需要一人多岗来完成相关的工作。同时,本文的软件企业并不涵盖向MS、Amazon、Gooogle、Albaba、Sap、AutoDesk等这些世界级公司,因为它们并不仅单独是以软件公司的形成存在,而是一家家的科技世界级公司或互联网巨头,他们是多元化产品的,不是仅仅做软件。

             当我们伙伴决定出来单干,创立初创公司,那么这仅有的几个人分工亦必需有负责市场、有负责技术、有负责内务,也有可能一个人要做市场也要做技术还要Coding,甚至于老板一个人要担当所角色 ,而且要与在公司进行市场PK,所以我们初创是最艰难的,当然一个人不可以做所有的事,我们要考虑一下合作。 当企业发展到10几人团队时可以将开发与测试分离,由一到两人负责市场,一人担当技术负责兼架构师、项目经理,前后端可以分离角色,项目经理或产品经理要负责项目的需求、架构设计,也要做开发工作。 当企业发展到几十人时,作为大几十号人的软件公司在国内算得上是中等规模的软件公司了。这时可以把技术分工进一步拆分 ,架构师与项目经理角色分开,每项目配测试岗、可以考虑设置数据处理和DBA岗, 如果是大数据公司则数据工程师是很重要的,如是AI公司那么要专门的算法工程师,美工可以招聘也可以找外部合作。当软件公司发展到100人以上的团队,那么可以按产品线或业务领域设置事业部了,也可以设立领域专家岗位专门提供行业业务领域的规范和业务规则和算法,增加品管岗位,技术岗位更加细分,如上位机程序工程师,VUE工程师,微信开发工程师等。增加运维工程师负责公司的机房服务器网络主机、系统运行环境支持等工作,当前DevOps已把这部分工作谈化了。

            一个企业的起点与发展与其前期资源、产品、资本基础、市场基础及其它外部环境息息相关。这些因素太大篇幅,不确定因素也很大,不是本文要介绍的内容,组织架构的设定还有外部经济技术环境、人文环境、企业发起自身的特点等等都有关系。本文只从软件技术特点和技术规模因素一定的情况下,提出自己在组织构架设定建议。


    未来的组织方式:

            企业在成长的过程中组织自身也是不断的变革的,组织方式也会随着社会发展、技术进步、经济环境等方面而发生改变,软件企业也一样。

            组织只包含人员岗位的因子,但随着人工智能时间代的到来,或许未来也要考虑到智能机器设备也是在组织中担当一个重要岗位角色的 ,我们需要为这个角色 进行职责划分,为这个角色进行绩效管理。我们当下的BPM各节点都是人来处理的,而当AI来处理时,那么他会是怎么一种情况呢。值得一提的是,大工业革命时,思想家在提出科学管理学时,把人作为生产线上的一个有生命的机器看待,而在不久的将来,是否把机器当作会思考的人来看待呢。

            随着这几年互联网的飞速发展,一个个巨型的互联网平台脱颖而出,个人或小团队通过平台承接业务,而在整个平台运作环境下又是一个整体,平台就是一个组织。也许像某些人提出的,未来公司化组织会慢慢弱化,而一个个平台加个体的组织方式会变得普遍,在平台组织方式下,对人员的绩效,-福利,考核,责权利方式都会改变。

            随着信息技术的发展,互联网技术的进步,分工是在线完成的,进度管理是在线完成的,协作在线的,沟通与会议都是在线的,管理与绩效也是在线的,团队个体和组织通过线上平台协同起来,成为一个虚拟化的组织 。

            我们组织管理考虑的因素,感情,人际关系,欲望,人文,技术等等,一切都在发生着变化,我也不知道会走向何方,只能就根据实际情况来吧。也许在更远的未来,组织者、决策和协调者是AI,而人 只是在AI的指挥下完成一个个任务,这会是什么样的场景,自己去想象。

    更多相关内容
  • 多层级企业组织架构图.pptx,PPTfans_0347
  • 企业的组织结构图必需能形象化地展现和传达企业组织结构以及员工和企业的信息,EAS人力资源... 本文档主要对组织架构图工具特性和应用价值简要介绍,工具的详细操作说明详见视频《EASHR组织架构图新功能演示.avi》
  • 有朋友一直不太明白组织架构图怎么,其实组织架构图就是组织结构图。小编今天就在这里以一个公司为例,来给大家演示一番人员组织结构图怎么。 老规矩,先说一下小编使用的软件跟电脑系统,这里用的是...

    有朋友一直不太明白组织架构图怎么做,其实组织架构图就是组织结构图。小编今天就在这里以一个公司为例,来给大家演示一番人员组织结构图怎么做。

    老规矩,先说一下小编使用的软件跟电脑系统,这里用的是MindManager2019年版本(win10系统),首先我们点击右上角文件两个小字,在点击新建,就可以找到MindManager软件“模板主页”里面的“空白模板”,再从“空白模板”里面找到我们想要的“组织结构图导图”。这是组织结构图怎么做的基础。

    IMG_256

    图1:MindManager模板主页

    点击“组织结构图导图”,就会出现一个这样的模板预览,点击右下角创建导图,就能够出现我们想要的组织结构图导图模板,这是组织结构图怎么做的第二步,这也是我选择MindManager这个软件来给大家演示组织结构图怎么做的原因,省时省力还适合新手。

    IMG_256

    图2:维恩图模板预览

    点击之后,出现了一个中心主题,如果我们需要低一级别的主题,就可以点击灰色框框的那个加号,产生许多主要主题。

    图3:组织架构图主题图

    再点击主要主题的框框上的加号,就可以产生我们需要的副主题。而且一个副主题下面也可以产生其他副主题。

    图4:组织架构图基本结构图

    上面是组织结构图怎么做的一个基本操作。下面,我们再将我们想要做的内容插入进每一个框框。一个中型公司里,一般是总经理总管全局,下面会有技术部、生产部、市场部、管理部、财政部等等部门,他们是第二级别的重要人员。

    图5:组织架构图主要部门图

    然后每一个部门下面也会有负责不同事物的各种部门,比如说技术部下面可能会分为研发部与设计部,市场部也会分为售前部门与售后部门,管理部会分为人事部与行政部,财务部可能会分为会计部与出纳部。每一个公司的分工可能会有不一致,但是大概还是相通的。

    DHM}HMRY5$ZM3A4RDHXH[1D

    图6:人员组织架构图

    上面就是关于人员组织结构图怎么做的一个基本教程。不同的公司情况不一样画出来的图也不一样,但是学会了操作步骤,有专业的思维导图MindManager软件,我认为画一个这样的图还是很简单的。有兴趣的朋友,可以去MindManager官方网站下载这款软件

    展开全文
  • 还在用PPT、Word和Excel画企业组织结构吗?对于人力资源的同事来说,画组织结构是一键非常头疼的事情,尤其是对于一些大公司和人员变动较大的公司来说,需要经常更换组织结构,每次变动都要耗费大量的时间和...

    还在用PPT、Word和Excel画企业组织结构图吗?对于人力资源的同事来说,画组织结构图是一键非常头疼的事情,尤其是对于一些大公司和人员变动较大的公司来说,需要经常更换组织结构图,每次变动都要耗费大量的时间和精力去重新绘图。其实绘制织结构图很简单,之所以难是因为没有找对工具和方法!今天小编就教你如何用亿图图示轻松绘制一个既美观又专业的组织结构图!

    下图是一个简单的组织结构图例子,小编就以此为例,详细讲解一下好看清晰、实用的公司组织结构图是怎么画出来的。

    1、新建组织结构图

    2、创建组织结构

    从左侧符号库中,双击或者拖拽一个“职位”图形到绘图页面。

    3、增加下属

    将鼠标移动到图形上,就会出现一个按钮,点击,即可快速创建一个下属。

    点击多次按钮,可添加多个同级下属,如下图所示:

    同理,按照此操作一级一级的添加下属,就可以得到一个大概的组织结构框架:

    4、自定义显示域

    选中组织结构图,此时软件上方菜单栏就会出现“组织结构图”菜单,选择“定义域”,即可给形状添加可显示的属性。

    温馨提示:点击“定义属性:可自定义新的属性。

    5、修改显示选项

    点击显示选项,会弹出一个窗口,在定义域中添加的形状属性会全部显示出来,在这个界面可以选择需要显示的属性,也可以对各属性显示的字体样式、颜色、排列顺序进行调整。

    温馨提示:此操作可以适用于全部形状,也可以适用于选中的形状。

    6、替换文字

    单击选中需要修改文字的形状,直接输入文字就可以了。双击该形状也可以输入文字。

    温馨提示:如果绘图页面显示比例小于100%,在输入文字时,页面会自动还原到100%的状态。

    7、调整布局

    点击“市场营销部门”,在组织结构菜单的布局设置中,选择需要的布局类型。同理,按照此方法,将其他需要调整的形状进行设置就可以了。

    温馨提示:Ctrl+A键,全选整个组织结构图,可以一键进行调整整个布局,按住鼠标左键,选中需要调整的形状,可以对选中区域的形状进行修改。

    8、修改主题风格

    使用模板绘制的组织结构图的颜色,是软件默认主题的风格,可以在“页面布局”的主题设置中进行修改。

    9、修连接线样式

    选中需要修改的连接线,打开软件右侧工具栏,选择线条工具。

    在这里,可以对连接线、线条的颜色、宽度、透明度、线头样式、箭头样式等属性进行修改。

    温馨提示:通过“页面布局”菜单下的“连接线”工具,修改的样式会对整个绘图页面的连接线起作用,如果只需要对特定的连接线进行修改的,不建议从这里修改。

    10、为组织结构图添加标题

    从符号库中,选择一个标题条类型,将其拖拽至绘图页,标题条的颜色会根据已经设置好的主题颜色自动修改。双击标题的文字可对文字进行修改。

    11、添加其他符号

    在符号库旁边的搜索框中,输入需要插入的符号名字,将需要的图形拖到绘图页。

    温馨提示:两个图形若重叠显示,如上图所示的情况,可以通过“开始”–“置于顶层/底层”的方法决定图片显示的先后顺序。

    12、调整页面布局

    所有图形都画好之后,难免会发现,有些地方会多出很多空白的地方,图形显示位置不在居中位置,怎么办呢?

    很简单,鼠标右键,选择页面适应到绘图,或者在“页面布局中”选择页面适应到绘图。

    然后,再全选所有的图形,点击“开始”菜单的”居中“设置”,就可以将整个图形居中显示了。

    以上方法,只是亿图图示的一种基本操作方法,除了组织结构图模板、例子,后续教你通过一键导入数据快速创建组织架构图。

    展开全文
  • 企业微信组织架构同步优化的思路

    万次阅读 2018-02-12 16:03:25
    企业微信初版的全量同步方案在快速的业务增长面前已经捉襟见肘,针对其遇到的问题,怎样做好组织架构同步优化?这是又一篇来自微信团队的技术实战。写在前面企业微信在快速发展过程中,陆续有大企业加入使用,企业...

    作为企业级的微信,在业务快速发展的背景下,迭代优化的要求也越发急迫。企业微信初版的全量同步方案在快速的业务增长面前已经捉襟见肘,针对其遇到的问题,怎样做好组织架构同步优化?这是又一篇来自微信团队的技术实战。

    写在前面

    企业微信在快速发展过程中,陆续有大企业加入使用,企业微信初版采用全量同步方案,该方案在大企业下存在流量和性能两方面的问题,每次同步消耗大量流量,且在 iPhone 5s 上拉取 10w+ 成员架构包解压时会提示 memory warning 而应用崩溃。

    全量同步方案难以支撑业务的快速发展,优化同步方案越来越有必要。本文针对全量同步方案遇到的问题进行分析,提出组织架构增量同步方案,并对移动端实现增量同步方案的思路和重难点进行了讲解。

    企业微信业务背景

    在企业微信中,组织架构是非常重要的模块,用户可以在首页的 tab 上选择"通讯录"查看到本公司的组织架构,并且可以通过"通讯录"找到本公司的所有成员,并与其发起会话或者视频语音通话。

    组织架构是非常重要且敏感的信息,企业微信作为企业级产品,始终把用户隐私和安全放在重要位置。针对组织架构信息,企业管理员具有高粒度隐私保护操作权限,不仅支持个人信息隐藏,也支持通讯录查看权限等操作。

    在企业微信中,组织架构特征有:

    1、多叉树结构。叶子节点代表成员,非叶子节点代表部门。部门最多只有一个父部门,但成员可属于多个部门。

    2、架构隐藏操作。企业管理员可以在管理后台设置白名单和黑名单,白名单可以查看完整的组织架构,其他成员在组织架构里看不到他们。黑名单的成员只能看到自己所在小组和其所有的父部门,其余人可以看到黑名单的成员。

    3、组织架构操作。企业管理员可以在 web 端和 app 端添加 / 删除部门,添加 / 删除 / 移动 / 编辑成员等操作,并且操作结果会及时同步给本公司所有成员。

    全量同步方案的问题

    本节大致讲解下全量同步方案实现以及遇到的问题。

    全量同步方案原理

    企业微信在 1.0 时代,从稳定性以及快速迭代的角度考虑,延用了企业邮通讯录同步方案,采取了全量架构同步方案。

    核心思想为服务端下发全量节点,客户端对比本地数据找出变更节点。此处节点可以是用户,也可以是部门,将组织架构视为二叉树结构体,其下的用户与部门均为节点,若同一个用户存在多个部门下,被视为多个节点。

    全量同步方案分为首次同步与非首次同步:

    首次同步服务端会下发全量的节点信息的压缩包,客户端解压后得到全量的架构树并展示。

    非首次同步分为两步:

    服务端下发全量节点的 hash 值。客户端对比本地数据找到删除的节点保存在内存中,对比找到新增的节点待请求具体信息。

    客户端请求新增节点的具体信息。请求具体信息成功后,再进行本地数据库的插入 / 更新 / 删除处理,保证同步流程的原子性。

    用户反馈

    初版上线后,收到了大量的组织架构相关的 bug 投诉,主要集中在:

    流量消耗过大。

    客户端架构与 web 端架构不一致。

    组织架构同步不及时。

    这些问题在大企业下更明显。

    问题剖析

    深究全量同步方案难以支撑大企业同步的背后原因,皆是因为采取了服务端全量下发 hash 值方案的原因,方案存在以下问题:

    拉取大量冗余信息。即使只有一个成员信息的变化,服务端也会下发全量的 hash 节点。针对几十万人的大企业,这样的流量消耗是相当大的,因此在大企业要尽可能的减少更新的频率,但是却会导致架构数据更新不及时。

    大企业拉取信息容易失败。全量同步方案中首次同步架构会一次性拉取全量架构树的压缩包,而超大企业这个包的数据有几十兆,解压后几百兆,对内存不足的低端设备,首次加载架构可能会出现内存不足而 crash。非首次同步在对比出新增的节点,请求具体信息时,可能遇到数据量过大而请求超时的情况。

    客户端无法过滤无效数据。客户端不理解 hash 值的具体含义,导致在本地对比 hash 值时不能过滤掉无效 hash 的情况,可能出现组织架构展示错误。

    优化组织架构同步方案越来越有必要。

    寻找优化思路

    寻求同步方案优化点,我们要找准原来方案的痛点以及不合理的地方,通过方案的调整来避免这个问题。

    组织架构同步难点

    准确且耗费最少资源同步组织架构是一件很困难的事情,难点主要在:

    组织架构架构数据量大。消息 / 联系人同步一次的数据量一般情况不会过百,而企业微信活跃企业中有许多上万甚至几十万节点的企业,意味着架构一次同步的数据量很轻松就会上千上万。移动端的流量消耗是用户非常在乎的,且内存有限,减少流量的消耗以及减少内存使用并保证架构树的完整同步是企业微信追求的目标。

    架构规则复杂。组织架构必须同步到完整的架构树才能展示,而且企业微信里的涉及到复杂的隐藏规则,为了安全考虑,客户端不应该拿到隐藏的成员。

    修改频繁且改动大。组织架构的调整存在着新建部门且移动若干成员到新部门的情况,也存在解散某个部门的情况。而员工离职也会通过组织架构同步下来,意味着超大型企业基本上每天都会有改动。

    技术选型-提出增量更新方案

    上述提到的问题,在大型企业下会变得更明显。在几轮方案讨论后,我们给原来的方案增加了两个特性来实现增量更新:

    增量。服务端记录组织架构修改的历史,客户端通过版本号来增量同步架构。

    分片。同步组织架构的接口支持传阈值来分片拉取。

    在新方案中,服务端针对某个节点的存储结构可简化为:

    vid 是指节点用户的唯一标识 id,departmentid 是指节点的部门 id,is_delete 表示该节点是否已被删除。

    若节点被删除了,服务端不会真正的删除该节点,而将 is_delete 标为 true。

    若节点被更新了,服务端会增大记录的 seq,下次客户端来进行同步便能同步到。

    其中,seq 是自增的值,可以理解成版本号。每次组织架构的节点有更新,服务端增加相应节点的 seq 值。客户端通过一个旧的 seq 向服务器请求,服务端返回这个 seq 和 最新的 seq 之间所有的变更给客户端,完成增量更新。

    图示为:

    通过提出增量同步方案,我们从技术选型层面解决了问题,但是在实际操作中会遇到许多问题,下文中我们将针对方案原理以及实际操作中遇到的问题进行讲解。

    增量同步方案

    本节主要讲解客户端中增量同步架构方案的原理与实现,以及基础概念讲解。

    增量同步方案原理

    企业微信中,增量同步方案核心思想为:

    服务端下发增量节点,且支持传阈值来分片拉取增量节点,若服务端计算不出客户端的差量,下发全量节点由客户端来对比差异。

    增量同步方案可抽象为四步完成:

    客户端传入本地版本号,拉取变更节点。

    客户端找到变更节点并拉取节点的具体信息。

    客户端处理数据并存储版本号。

    判断完整架构同步是否完成,若尚未完成,重复步骤 1,若完成了完整组织架构同步,清除掉本地的同步状态。

    忽略掉各种边界条件和异常状况,增量同步方案的流程图可以抽象为:

    接下来我们再看看增量同步方案中的关键概念以及完整流程是怎样的。

    版本号

    同步的版本号是由多个版本号拼接成的字符串,版本号的具体含义对客户端透明,但是对服务端非常重要。

    版本号的组成部分为:

    版本号回退

    增量同步在实际操作过程中会遇到一些问题:

    服务端不可能永久存储删除的记录,删除的记录对服务端是毫无意义的而且永久存储会占用大量的硬盘空间。而且无效数据过多也会影响架构读取速度。当 is_delete 节点的数目超过一定的阈值后,服务端会物理删除掉所有的 is_delete 为 true 的节点。此时客户端会重新拉取全量的数据进行本地对比。

    一旦架构隐藏规则变化后,服务端很难计算出增量节点,此时会下发全量节点由客户端对比出差异。

    理想状况下,若服务端下发全量节点,客户端铲掉旧数据,并且去拉全量节点的信息,并且用新数据覆盖即可。但是移动端这样做会消耗大量的用户流量,这样的做法是不可接受的。所以若服务端下发全量节点,客户端需要本地对比出增删改节点,再去拉变更节点的具体信息。

    增量同步情况下,若服务端下发全量节点,我们在本文中称这种情况为版本号回退,效果类似于客户端用空版本号去同步架构。从统计结果来看,线上版本的同步中有 4% 的情况会出现版本号回退。

    阈值分片拉取

    若客户端的传的 seq 过旧,增量数据可能很大。此时若一次性返回全部的更新数据,客户端请求的数据量会很大,时间会很长,成功率很低。针对这种场景,客户端和服务端需要约定阈值,若请求的更新数据总数超过这个阈值,服务端每次最多返回不超过该阈值的数据。若客户端发现服务端返回的数据数量等于阈值,则再次到服务端请求数据,直到服务端下发的数据数量小于阈值。

    节点结构体优化

    在全量同步方案中,节点通过 hash 唯一标示。服务端下发的全量 hash 列表,客户端对比本地存储的全量 hash 列表,若有新的 hash 值则请求节点具体信息,若有删除的 hash 值则客户端删除掉该节点信息。

    在全量同步方案中,客户端并不能理解 hash 值的具体含义,并且可能遇到 hash 碰撞这种极端情况导致客户端无法正确处理下发的 hash 列表。

    而增量同步方案中,使用 protobuf 结构体代替 hash 值,增量更新中节点的 proto 定义为:

    在增量同步方案中,用 vid 和 partyid 来唯一标识节点,完全废弃了 hash 值。这样在增量同步的时候,客户端完全理解了节点的具体含义,而且也从方案上避免了曾经在全量同步方案遇到的 hash 值重复的异常情况。

    并且在节点结构体里带上了 seq 。节点上的 seq 来表示该节点的版本,每次节点的具体信息有更新,服务端会提高节点的 seq,客户端发现服务端下发的节点 seq 比客户端本地的 seq 大,则需要去请求节点的具体信息,避免无效的节点信息请求。

    判断完整架构同步完成

    因为 svr 接口支持传阈值批量拉取变更节点,一次网络操作并不意味着架构同步已经完成。那么怎么判断架构同步完成了呢?这里客户端和服务端约定的方案是:

    若服务端下发的(新增节点+删除节点)小于客户端传的阈值,则认为架构同步结束。

    当完整架构同步完成后,客户端需要清除掉缓存,并进行一些额外的业务工作,譬如计算部门人数,计算成员搜索热度等。

    增量同步方案 - 完整流程图

    考虑到各种边界条件和异常情况,增量同步方案的完整流程图为:

    增量同步方案难点

    在加入增量和分片特性后,针对几十万人的超大企业,在版本号回退的场景,怎样保证架构同步的完整性和方案选择成为了难点。

    前文提到,隐藏规则变更以及后台物理删除无效节点后,客户端若用很旧的版本同步,服务端算不出增量节点,此时服务端会下发全量节点,客户端需要本地对比所有数据找出变更节点,该场景可以理解为版本号回退。在这种场景下,对于几十万节点的超大型企业,若服务端下发的增量节点过多,客户端请求的时间会很长,成功率会很低,因此需要分片拉取增量节点。而且拉取下来的全量节点,客户端处理不能请求全量节点的具体信息覆盖旧数据,这样的话每次版本号回退的场景流量消耗过大。

    因此,针对几十万节点的超大型企业的增量同步,客户端难点在于:

    断点续传。增量同步过程中,若客户端遇到网络问题或应用中止了,在下次网络或应用恢复时,能够接着上次同步的进度继续同步。

    同步过程中不影响正常展示。超大型企业同步的耗时可能较长,同步的时候不应影响正常的组织架构展示。

    控制同步耗时。超大型企业版本号回退的场景同步非常耗时,但是我们需要想办法加快处理速度,减少同步的消耗时间。

    思路

    架构同步开始,将架构树缓存在内存中,加快处理速度。

    若服务端端下发了需要版本号回退的 flag,本地将 db 中的节点信息做一次备份操作。

    将服务端端下发的所有 update 节点,在架构树中查询,若找到了,则将备份数据转为正式数据。若找不到,则为新增节点,需要拉取具体信息并保存在架构树中。

    当完整架构同步结束后,在 db 中找到并删除掉所有备份节点,清除掉缓存和同步状态。

    若服务端下发了全量节点,客户端的处理时序图为:

    服务端下发版本号回退标记

    从时序图中可以看出,服务端下发的版本号回退标记是很重要的信号。

    而版本号回退这个标记,仅仅在同步的首次会随着新的版本号而下发。在完整架构同步期间,客户端需要将该标记缓存,并且跟着版本号一起存在数据库中。在完整架构同步结束后,需要根据是否版本号回退来决定删除掉数据库中的待删除节点。

    备份架构树方案

    架构树备份最直接的方案是将 db 中数据 copy 一份,并存在新表里。如果在数据量很小的情况下,这样做是完全没有问题的,但是架构树的节点往往很多,采取这样简单粗暴的方案在移动端是完全不可取的,在几十万人的企业里,这样做会造成极大的性能问题。

    经过考虑后,企业微信采取的方案是:

    若同步架构时,后台下发了需要版本号回退的 flag,客户端将缓存和 db 中的所有节点标为待删除(时序图中 8,9 步)。

    针对服务端下发的更新节点,在架构树中清除掉节点的待删除标记(时序图中 10,11 步)。

    在完整架构同步结束后,在 db 中找到并删除掉所有标为待删除的节点(时序图中 13 步),并且清除掉所有缓存数据。

    而且,在增量同步过程中,不应该影响正常的架构树展示。所以在架构同步过程中,若有上层来请求 db 中的数据,则需要过滤掉有待删除标记的节点。

    缓存架构树

    方案决定客户端避免不了全量节点对比,将重要的信息缓存到内存中会大大加快处理速度。内存中的架构树节点体定义为:

    此处我们用 std::map 来缓存架构树,用 std::pair 作为 key。我们在比较节点的时候,会涉及到很多查询操作,使用 map 查询的时间复杂度仅为 O(logn)。

    增量同步方案关键点

    本节单独将优化同步方案中关键点拿出来写,这些关键点不仅仅适用于本文架构同步,也适用于大多数同步逻辑。

    保证数据处理完成后,再储存版本号

    在几乎所有的同步中,版本号都是重中之重,一旦版本号乱掉,后果非常严重。

    在架构同步中,最最重要的一点是:

    保证数据处理完成后,再储存版本号。

    在组织架构同步的场景下,为什么不能先存版本号,再存数据呢?

    这涉及到组织架构同步数据的一个重要特征:架构节点数据是可重复拉取并覆盖的。

    考虑下实际操作中遇到的真实场景:

    若客户端已经向服务端请求了新增节点信息,客户端此时刚刚插入了新增节点,还未储存版本号,客户端应用中止了。

    此时客户端重新启动,又会用相同版本号拉下刚刚已经处理过的节点,而这些节点跟本地数据对比后,会发现节点的 seq 并未更新而不会再去拉节点信息,也不会造成节点重复。

    若一旦先存版本号再存具体数据,一定会有概率丢失架构更新数据。

    同步的原子性

    正常情况下,一次同步的逻辑可以简化为:

    在企业微信的组织架构同步中存在异步操作,若进行同步的过程不保证原子性,极大可能出现下图所示的情况:

    该图中,同步的途中插入了另外一次同步,很容易造成问题:

    输出结果不稳定。若两次同步几乎同时开始,但因为存在网络波动等情况,返回结果可能不同,给调试造成极大的困扰。

    中间状态错乱。若同步中处理服务端返回的结果会依赖于请求同步时的某个中间状态,而新的同步发起时又会重置这个状态,很可能会引起匪夷所思的异常。

    时序错乱。整个同步流程应该是原子的,若中间插入了其他同步的流程会造成整个同步流程时序混乱,引发异常。

    怎样保证同步的原子性呢?

    我们可以在开始同步的时候记一个 flag 表示正在同步,在结束同步时,清除掉该 flag。若另外一次同步到来时,发现正在同步,则可以直接舍弃掉本次同步,或者等本次同步成功后再进行一次同步。

    此外也可将同步串行化,保证同步的时序,多次同步的时序应该是 FIFO 的。

    缓存数据一致性

    移动端同步过程中的缓存多分为两种:

    内存缓存。加入内存缓存的目的是减少文件 IO 操作,加快程序处理速度。

    磁盘缓存。加入磁盘缓存是为了防止程序中止时丢失掉同步状态。

    内存缓存多缓存同步时的数据以及同步的中间状态,磁盘缓存用于缓存同步的中间状态防止缓存状态丢失。

    在整个同步过程中,我们都必须保证缓存中的数据和数据库的数据的更改需要一一对应。在增量同步的情况中,我们每次需要更新 / 删除数据库中的节点,都需要更新相应的缓存信息,来保证数据的一致性。

    优化数据对比

    内存使用

    测试方法:使用工具 Instrument,用同一账号监控全量同步和增量同步分别在首次加载架构时的 App 内存峰值。

    内存峰值测试结果

    分析

    随着架构的节点增多,全量同步方案的内存峰值会一直攀升,在极限情况下,会出现内存不足应用程序 crash 的情况(实际测试中,30w 节点下,iPhone 6 全量同步方案必 crash)。而增量同步方案中,总节点的多少并不会影响内存峰值,仅仅会增加同步分片的次数。

    优化后,在腾讯域下,增量同步方案的 App 总内存使用仅为全量同步方案的 53.1%,且企业越大优化效果越明显。并且不论架构的总节点数有多少,增量同步方案都能将完整架构同步下来,达到了预期的效果。

    流量使用

    测试方法:在管理端对成员做增加操作五次,通过日志分析客户端消耗流量,取其平均值。日志会打印出请求的 header 和 body 大小并估算出流量使用值。

    测试结果

    分析

    增加成员操作,针对增量同步方案仅仅会新拉单个成员的信息,所以无论架构里有多少人,流量消耗都是相近的。同样的操作针对全量同步方案,每次请求变更,服务端都会下发全量 hash 列表,企业越大消耗的流量越多。可以看到,当企业的节点数达到 20w 级别时,全量同步方案的流量消耗是增量同步方案的近 500 倍。

    优化后,在腾讯域下,每次增量同步流量消耗仅为全量同步方案的 0.4%,且企业越大优化效果越明显。

    写在最后

    增量同步方案从方案上避免了架构同步不及时以及流量消耗过大的问题。通过用户反馈和数据分析,增量架构同步上线后运行稳定,达到了理想的优化效果。


    展开全文
  • 如何画出企业系统架构图

    千次阅读 2021-02-12 23:49:09
    该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴。 简单说明: 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 2.企业集成平台是以基础...
  • 在新单位上班半个月了,干的活都是小儿科的活,今天部门经理给了个图,让我写个组件来实现,图是一个横向的组织架构图。 好久之前就想写个组件来实现的,但由于一直感觉价值不大就没有动手。网上搜索了下 说是用d3...
  • 如果中台确实是解决企业现有问题的合理方案,那么建设过程中伴随的组织架构问题就是企业需要关心的,比如中台团队的人从哪来?经费从哪来?建设中台之后,业务团队的决策权力是不是被大幅缩减?本文采访了多位中台...
  • D3.js绘制竖向组织架构图

    万次阅读 2018-07-25 17:39:04
    先上效果: 主要参考:https://bl.ocks.org/mbostock/3184089 https://github.com/justincy/d3-pedigree-examples d3版本为3.x 主要代码如下: const width = 1200; const height = 500; ...
  • 【组织诊断】OD总监教你如何组织诊断 ...【组织架构组织架构设计策略 【组织文化】组织文化建设报告 【组织干预】如何组织干预 【组织变革】阿里组织变革理论与实践 【工具模型】OD组织发展实用模型
  • 企业架构培训感悟

    千次阅读 热门讨论 2021-01-06 22:23:59
    很多企业希望能够数字化转型,但是一到具体启动的时候又觉得两眼一抹黑,不知道如何下手。这次培训向我们阐述了如何可以通过TOGAF这种方法论把战略进行落地。 二、为什么企业架构那么重要? 作为软件开发...
  • 十张图看懂华为业务与组织架构

    千次阅读 2020-04-14 17:39:13
    近十年来,华为的业务和组织架构发生了比较大的变化。特别是2017年成立了Cloud BU,到2019年又成立了Cloud & AI BG,前不久华为高管侯金龙以云与计算(Cloud &...(2009年华为业务与组织架构图) ...
  • 千军易得,一将难求,究竟该怎样培养自己的得力干将呢?嘉御基金创始合伙人卫哲老师可谓把相关的方法论讲透了,字字珠玑,推荐你好好品味。 怎么去界定一个班子?它要像“扳子”一样,给你拧着。...看组织。...
  • js实现组织结构

    万次阅读 2019-02-15 20:42:28
    这种组织结构是不是很熟悉?一般是以画图的形式或者word形式展现,下面给大家介绍一下如何用原生 JS 实现,以便于可以显示在网页上。 二、整理思路(实现步骤) 1. 要想实现这种复杂的组织结构,首先需要整理...
  • 架构图、流程图、结构图、功能图、逻辑图

    万次阅读 多人点赞 2021-11-15 16:15:47
    我们画的架构图、流程图、结构图、功能图、逻辑图等,都需要好看、好懂、好用、好搞,因为: 好看是为了提升沟通效率, 好懂是为了提升交流共识, 好用是为了提升交付质量, 好搞是为了提升实施速度。 架构图有...
  • 软件架构图集锦

    千次阅读 2019-04-30 17:00:15
    该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴。 简单说明: 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 2.企业集成平台是以基础...
  • 关于IT企业组织架构的一些思考

    千次阅读 2019-01-08 05:30:49
    先谈谈一般公司的组织架构把,传统的软件企业组织架构是水平的,涉及和跨越多个部门,例如下面的一个企业组织架构(虚拟出来的,说明而已)   首先层级非常多,从CEO到最终的开发人员,中间估计有6级别,...
  • 系统架构图编写(概要设计)

    千次阅读 2022-02-10 09:40:08
    系统架构图编写(概要设计) 架构图之间的关系 业务架构图 业务架构,是IT架构的基础。 是从业务、产品视角,描述整个平台、或某个产品的实现。 应用架构图 站在整个平台视角,描述整个平台架构。 分为两种,一种...
  • 软件项目组织架构安排

    万次阅读 2019-04-06 19:45:58
    这个主题涉及到三个方面,项目计划管理、组织管理和技术管理范畴。 项目计划管理是项目管理中的一个大... 从软件企业整体的组织架构来说,不外乎包括项目型、职能型、矩阵型几类。当然其中有偏项目型的组织结构,...
  • 软件企业测试团队的组织架构

    千次阅读 2016-04-26 14:38:53
    因为各个组织的情况和发展思路不同,很难简单说哪一种好或者不好,从测试团队的角度来看各有利弊。集中在一个大的测试部门的主要好处是: 1、因为资源的整合,可以减少各个团队的重复建设,集中来一些平台建设,...
  • 系统架构图

    万次阅读 2018-08-03 11:48:57
    该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴。  简单说明: 1.中间件基础运行环境是经过统一规划的以WebLogic、JBOSS为主的集群环境 ...
  • 企业总体架构是什么?有什么用?具体怎么?...企业商务模型的内容主要包括主营业务、商务模式、商务主体、竞品分析、组织架构、商务运作模型和业务流程等。主营业务即公司什么业务。商业模式即
  • 本文是架构设计实践五部曲系列文章的第一篇,架构与架构图。本文将对架构作深入的阐释,并教你什么时候画架构图、怎么画架构图。在日常系统开发过程中,作为技术人员想必大家都参与过...
  • 大多数企业多是重系统建设、轻数据管理,系统建设容易出成绩呗,好向领导汇报,今年了什么什么系统,解决了什么问题,但系统建的差不多了,才发现底层的基础数据、核心数据未统筹考虑、未统一设计,各业务系统口径...
  • 如何绘制业务架构图 — 3.分解图

    千次阅读 2020-12-06 15:05:43
    通常被用来做架构图中的详细设计。绘制分解图需要对研究对象有深刻的理解。 分解图是对研究要素的“静态表达”(比较而言,流程图是“动态表达”,详见下一篇)。 1. 模型解读 以企业的收支功能为例,说明下面分解图
  • Spring Cloud 微服务架构图

    万次阅读 多人点赞 2018-08-15 11:32:43
    Spring Cloud 微服务总体架构图 上面图中技术名词理解: 1、Sleuth-链路跟踪 为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们...
  • 各种软件系统架构图解析

    万次阅读 2019-01-09 15:10:22
    发布一企业技术架构图,供大家参考。     该技术架构图是本人根据多年企业技术架构经验而制定,是企业技术的总架构图,希望对CTO们有所借鉴。 &nbsp...
  • 工作两三年了,整不明白架构图都画啥?

    千次阅读 多人点赞 2021-03-01 08:46:26
    技术架构图 难度:⭐⭐⭐⭐ 作用:技术架构图主要是对于研发层面技术实现指导的,它可以把系统分层和实现结构划分清楚。另外一般也会把案例工程的结构拿出来一起讲解,这样可以让团队伙伴快速的进入开发。 五、...
  • 企业应用架构是指一整套软件系统的构建,通过合理的划分和设计组合在一起,支持企业方方面面的经营运作。 不论是传统企业,还是互联网公司,发展到一定阶段,都需要一整套体系化的应用架构来支撑其运转。良好的、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 80,699
精华内容 32,279
关键字:

企业组织架构图怎么做