禅道项目管理,带你避开项目管理中的那些坑
Posted qiaoyin-joy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了禅道项目管理,带你避开项目管理中的那些坑相关的知识,希望对你有一定的参考价值。
在项目团队中,每个新的研发项目的立项、启动都是经过缜密的规划和反复的沟通确认。每一个新的研发需求提交,都是经过团队共同讨论,最终评审通过的。但尽管如此,项目在实施的过程中,也会难以避免地出现各种突发问题,导致在实施的过程中项目逐渐偏离既定的目标,出现进度延期、成本超支等情况,如果不能妥善应对,很容易给项目造成难以挽回的损失。
但项目管理中的“坑”虽然多,但因为都是在本研发项目的生命周期中发生的,总结起来大致可归纳为:发生在项目管理的需求、计划、执行、交付的过程中,大致涉及到人员、时间、成本、质量、协作、沟通、Bug、测试等项目管理的要素。那么,项目管理中有哪些常见的坑?又该如何应对呢?
项目团队内部信息无法对齐
在项目管理过程中,沟通是最重要的一个环节,没有定期且明确的沟通渠道,项目很容易因为各部门的理解偏差而走入歧途。 缺乏有效的沟通,信息不对成,对项目团队来说是十分致命的。没有有效的沟通与交流,决策传递将会受阻并停滞。虽然大多数人都知道有效沟通对于项目很关键,但在绝大多数项目管理体制设计和实践中,沟通管理往往是最容易被忽视的。
使用禅道项目管理软件,能够轻松解决项目团队沟通问题。禅道内置Scrum敏捷开发全流程项目管理,敏捷模型,通过迭代式管理方法将项目分为多个短期迭代,小步快跑、快速迭代、持续优化,确保功能实现贴合实际需求。禅道可以有效纠正项目前期需求不太明确,通过创建一个与团队高度契合的完美sprint,快速迭代团队任务,交付给客户并获取反馈,修订产品的方向,更好地响应市场。
通过禅道开发流程,帮助团队建立定期沟通机制:每周选定一天,并在固定时间段召开工作会议,要让团队成员都参与到沟通中。营造开放互信的团队氛围,禅道项目管理软件,从一开始就制定一些简单的沟通策略,例如每日站会、需求评审会、定期检查项目可交付成果并对此作出评价,和项目团队成员一起了解项目进展情况,并能够主动发现和解决出现的问题,通过沟通与项目团队更好的合作,实现项目的实时更新和进度的全员对齐,避免项目到期前无法交付的情况出现。
需求、任务未能准确拆分,权责划分不清晰
需求和任务是项目的组成要素之一,他们组成了项目的时间跨度和资源配置,从项目立项到时间估算、进度把控、测试反馈到产品发布的,项目的整个过程是由一个又一个的需求和任务组成。如果项目计划制定的过于粗糙、缺乏细节、权责划分不清晰,就很容易使项目团队在完成时间和要求上产生混淆。
在做项目计划的时候,确定计划中所有的活动和相关任务,确保每个任务模块都有人负责,有时间节点,有工时预估。尽管一开始创建的计划可能并不完美,但通过不断迭代,可以使项目无限趋于完善。
推荐使用禅道项目管理软件,它拥有强大的项目管理功能,能够帮助团队实现多角色、多场景下的项目管理。禅道认为在一个企业或者一个项目中,产品经理、研发团队、测试团队三者不应该是割裂的。在此基础上,禅道创新性的提出产品经理”、“研发团队”、“测试团队”三权分立的概念,三个部门互相配合,又互相制约,通过需求、任务、Bug来进行互动协作,无缝连接产品需求、产品研发、测试管理,打破部门边界,实现更紧密的跨部门协。帮助团队高效沟通,通过可视化的多人、多部门协作模式,清晰透明的过程反馈,提升团队工作效率和产品研发质量,实现团队协作与产品研发全生命周期支持。
项目时间估算不当,无法把握全局进度
项目时间的估算,对于项目的管理有着重要的意义,时间的估算并不是拍拍脑门的预估,它需要强大的分析能力,对项目难度的真实感知、对团队成员能力的了解,在估算中过于追求完美,为满足预算而估算,随意削减估算结果;以客户目标作为估算结果;藏匿不确定的成本、贪多偷减、过于依赖以往经验,都会对整个项目带来不可预估的影响。
项目团队需要在特定的时间内,保质保量地完成交付。这不仅是对项目团队全员素质的综合考验,更需要一款优秀的项目管理工具,来科学管理完成复杂项目、多人有协作的任务和时间过管理。
推荐使用禅道项目管理软件,在禅道中项目负责人可通过项目甘特图、项目周报、项目仪表盘来把控、及时跟进整体项目进度;项目团队成员可通过燃尽图、看板、项目进展列表、分组视图等功能来了解项目进度。
通过需求与任务管理、项目进度管理、测试用例管理、文档管理、版本(build)管理、Bug管理、发布管理等多种功能,禅道满足软件从需求、开发、测试、发布、运维的全生命周期管理。燃尽图、甘特图、看板、统计报表、树状图等多种项目进度呈现形式,满足不同维度的进度可视化,帮助更好地把控项目进展。
综上所述,使用禅道项目管理软件,是比较通用的研发项目管理提质增效的方法和手段。项目团队可通过禅道,结合各种不同项目的特点,针对具体研发场景,寻找出最贴合项目团队的最佳路径。具体详情可了解:
禅道安装手册http:// https://www.zentao.net/redirect-index-21493.html
盘点分库分表中,你一定要避开的那些坑!
扫描下方海报二维码,试听课程:
例如:单表中出现了,动辄百万甚至千万级别的数据。“分表分库”就成为解决上述问题的有效工具。
今天和大家一起看看,如何进行分表分库以及期间遇到的问题吧。
为什么会分表分库
数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。
再加上物理服务器的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。
数据分表
如果单表的数据量过大,例如千万级甚至更多,那么在操作表的时候就会加大系统的开销。
每次查询会消耗数据库大量资源,如果需要多表的联合查询,这种劣势就更加明显了。
以 MySQL 为例,在插入数据的时候,会对表进行加锁,分为表锁定和行锁定。
无论是哪种锁定方式,都意味着前面一条数据在操作表或者行的时候,后面的请求都在排队,当访问量增加的时候,都会影响数据库的效率。
那么既然一定要分表,那么每张表分配多大的数据量比较合适呢?这里建议根据业务场景和实际情况具体分析。
一般来说 MySQL 数据库单表记录最好控制在 500 万条(这是个经验数字)。既然需要将数据从一个表分别存放到多个表中,那么来看看下面两种分表方式吧。
垂直分表
根据业务把一个表中的字段(Field)分到不同的表中。这些被分出去的数据通常根据业务需要,例如分出去一些不是经常使用的字段,一些长度较长的字段。
一般被拆分的表的字段数比较多。主要是避免查询的时候出现因为数据量大而造成的“跨页”问题。
一般这种拆分在数据库设计之初就会考虑,尽量在系统上线之前考虑调整。已经上线的项目,做这种操作是要慎重考虑的。
水平分表
用 ID 取模的分表方式分配记录
ID 分别为 01-04 的四条记录,如果分配到 3 个表中,那么对 3 取模得到的余数分别是:
ID:01 对 3 取模余数为 1 ,存到“表 1”。
ID:02 对 3 取模余数为 2 ,存到“表 2”。
ID:03 对 3 取模余数为 3 ,存到“表 3”。
ID:04 对 3 取模余数为 1 ,存到“表 1”。
也就是说不用大家自己去建立这个 Mapping Table,在做查询的时候中间件帮助你实现了 Mapping Table 的功能。所以,我们这里只需要了解其实现原理就可以了。
水平拆分还有一种情况是根据数据产生的前后顺序来拆分存放。例如,主表只存放最近 2 个月的信息,其他比较老旧的信息拆分到其他的表中。通过时间来做数据区分。更有甚者是通过服务的地域来做数据区分的。
需要注意的是由于分表造成一系列记录级别的问题,例如 Join 和 ID 生成,事务处理,同时存在这些表需要跨数据库的可能性:
Join:需要做两次查询,把两次查询的结果在应用层做合并。这种做法是最简单的,在应用层设计的时候需要考虑。
ID:可以使用 UUID,或者用一张表来存放生成的 Sequence,不过效率都不算高。UUID 实现起来比较方便,但是占用的空间比较大。
Sequence 表的方式节省了空间,但是所有的 ID 都依赖于单表。这里介绍一个大厂用的 Snowflake 的方式。
其核心思想是:使用 41bit 作为毫秒数,10bit 作为机器的 ID(5 个 bit 是数据中心,5 个 bit 的机器 ID),12bit 作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是 0。
数据分库
说完了分表,再来谈谈分库。
每个物理数据库支持数据都是有限的,每一次的数据库请求都会产生一次数据库链接,当一个库无法支持更多访问的时候,我们会把原来的单个数据库分成多个,帮助分担压力。
这里有几类分库的原则,可以根据具体场景进行选择:
根据业务不同分库,这种情况都会把主营业务和其他功能分开。例如可以分为订单数据库,核算数据库,评论数据库。
根据冷热数据进行分库,用数据访问频率来划分,例如:近一个月的交易数据属于高频数据,2-6 个月的交易数据属于中频数据,大于 6 个月的数据属于低频数据。
根据访问数据的地域/时间范围进行分库。
如果 Slave 出现问题,会启动熔断机制停止对其的访问;如果 Master 出现问题,通过选举机制选择新的 Master 代替。
数据库扩容
主从数据库扩容
我们这里假设有两个数据库集群,每个集群分别有 M1 S1 和 M2 S2 互为主备。
这些修改不需要重启数据库服务,只需要修改代理配置就可以完成。由于 M1 M2 S1 S2 中会存在一些冗余的数据,可以后台起服务将这些冗余数据删除,不会影响数据使用。
此时,再考虑数据库可用性,将扩展后的 4 个主库进行主备操作,针对每个主库都建立对应的从库,前者负责写操作,后者负责读操作。
下次如果需要扩容也可以按照类似的操作进行。
双写数据库扩容
在没有数据库主从配置的情况下的扩容,假设有数据库 M1 M2 如下图:
需要对目前的两个数据库做扩容,扩容之后是 4 个库如下图。新增的库是 M3,M4 路由的方式分别是 ID%2=0 和 ID%2=1。
与此同时,后台服务对 M1 M3,M2 M4 做数据同步,建议先做全量同步再做数据校验。
当然会存在部分的数据冗余,需要像上面一个方案一样通过后台服务删除这些冗余数据,删除的过程不会影响业务。
分布式事务原理
CAP
互联网应用大多会使用分表分库的操作,这个时候业务代码很可能会同时访问两个不同的数据库,做不同的操作。同时这两个操作有可能放在同一个事务中处理。
业务代码往数据库 01 这个节点写入记录 A,数据库 01 把 A 记录同步到数据库 02,业务代码再从数据库 02 中读出的记录也是 A。那么两个数据库存放的数据就是一致的。
那么业务代码可以从数据库 02 中获取记录 A。也就是在节点出现问题的时候,还保证数据的可用性。
这种情况的前提是两个节点的通讯失败了,写入数据库 01 记录的时候,需要锁住数据库 02 记录不让其他的业务代码修改,直到数据库 01 记录完成修改。因此 C 和 A 在此刻是矛盾的。两者不能兼得。
BASE
软状态( Soft State):一条数据如果存在多个副本,允许副本之间同步的延迟,在较短时间内能够容忍不一致。这个正在同步并且还没有完成同步的状态称为软状态。
这里“进程 1”和“进程 2” 的操作就存在因果关系。“进程 2” 的计算依赖于进程 1 写入的 X,如果没有 X 的值,“进程 2”无法计算。
“进程 1”写入变量 X 之后,该进程可以获取自己写入的这个值。
如果一个会话中实现来读己之所写。一旦数据更新,客户端只要在同一个会话中就可以看到这个更新的值。
“进程 1”如果有三个操作分别是 1,2,3。“进程 2”有两个操作分别是 1,2。当进程请求系统时,系统会保证按照进程中操作的先后顺序来执行。
分布式事务方案
两阶段提交
第二阶段(提交阶段):如果协调者收到了参与者失败或者超时的消息,会给参与者发送回滚(rollback)消息;否则,发送提交(commit)消息。
两种情况处理如下:
协调者向所有参与者发出正式提交事务的请求(即 commit 请求)。
参与者执行 commit 请求,并释放整个事务期间占用的资源。
各参与者向协调者反馈 ack(应答)完成的消息。
协调者收到所有参与者反馈的 ack 消息后,即完成事务提交。
协调者向所有参与者发出回滚请求(即 rollback 请求)。
参与者使用第一阶段中的 undo 信息执行回滚操作,并释放整个事务期间占用的资源。
各参与者向协调者反馈 ack 完成的消息。
协调者收到所有参与者反馈的 ack 消息后,即完成事务。
TCC(Try,Confirm,Cancel)
我们来看看用 TCC 的方式如何解决:
这里的交易数据库设计除了有金额字段,还要有转出金额或者转入金额的字段,在 Cancel 回滚的时候使用。
“B 账户”和“C 账户”分别设置总金额为 80=50+30 和 130=60+70,也把交易状态设置为“转账成功”。则整个事务完成。
那么“B 服务”和“C 服务”需要把入账的金额从总金额里面减去,也就是 50=80-30 和 60=130-70。
TCC 接口实现
例如上面所说的检查资源,执行业务,回滚业务等操作。目前有很多开源的架构例如:ByteTCC、TCC-transaction 可以借鉴。
TCC 可靠性
TCC 通过记录事务处理日志来保证可靠性。一旦 Try,Confirm,Cancel 操作的时候服务挂掉或者出现异常,TCC 会提供重试机制。
另外如果服务存在异步的情况可以采用消息队列的方式通信保持事务一致。
分库表中间件介绍
这里介绍几个比较常用的中间件:
基于代理方式的有 MySQL Proxy 和 Amoeba。
基于 Hibernate 框架的有 Hibernate Shards。
基于 JDBC 的有当当 Sharding-JDBC。
基于 MyBatis 的类似 Maven 插件式的蘑菇街 TSharding。
实际上如果我们理解了分表分库的原理之后,实现并不难,很多大厂都提供了产品。
总结
简介:十六年开发和架构经验,曾担任过惠普武汉交付中心技术专家,需求分析师,项目经理,后在创业公司担任技术/产品经理。善于学习,乐于分享。目前专注于技术架构与研发管理。
如有收获,请划至底部,点击“在看”,谢谢!
BAT架构经验倾囊相授
以上是关于禅道项目管理,带你避开项目管理中的那些坑的主要内容,如果未能解决你的问题,请参考以下文章