精华内容
下载资源
问答
  • 如果你的企业目前没有实现爆炸性增长,那么缺乏清晰可实现目标很可能是主要原因。 发展业务有很多影响因素,但原因并不明确。如果你打算在这一年里达到新的里程碑,请确保你在这三个业务领域都有明确。 1.明确你为...

    在这里插入图片描述
    在我们的生活和事业中迷茫和失去方向时常发生,有时候重复的无用功和效率低下的操作执行影响我们的业务发展和增长效率。

    当我们缺乏清晰目标时,我们会以许多不同的方式阻碍自己的公司发展。

    如果你的企业目前没有实现爆炸性增长,那么缺乏清晰可实现目标很可能是主要原因。

    发展业务有很多影响因素,但原因并不明确。如果你打算在这一年里达到新的里程碑,请确保你在这三个业务领域都有明确性。

    1.明确你为什么要建立一个企业

    创业的想法的确很有吸引力,你可以成为自己的老板并安排自己的工作时间。你可以根据自己的喜好创造收入,因为这些原因你创业,但是你没有一个创业的主要明确目标。

    很多人创业什么挣钱做什么,弄了一段时间,发现好累,感觉这个业务不是最适合自己的,所以经常调整自己的方向。

    找不到发展业务的方法,缺乏明确性指导来随意开展业务。你的业务应该围绕你感兴趣的行业或者自己在这个行业有一定的积累后开始推动。

    你的规划和激情可以帮助你继续朝着你的目标前进。明确整体战略,而不是战术。通过明确的主策略,战术通常更容易实施。

    比如说我做企业是为了挣钱,挣多少呢?定个小目标,然后细分到每个时间节点,执行这个计划。

    2.明确你的业务对象以及你与客户的沟通方式

    你不能接触到每个人,你也不应该去这样尝试。你需要明确你的业务对象以及帮助他们做的事情。

    举个例子,很多人对于健康生活充满了热情,教会人们如何进行健康生活的愿望过于宽泛。你可以细分一下,教人们如何使用那一种类的食物进行健康生活。

    那你的业务方向是健康+食物,通过食物的定价和种类来做人群细分。

    当你清楚了解你所定位的客群市场时,你可以对已有客群进行分析和规划你的目标,以及实现这些目标的最佳方式。

    不同的年龄层,不同背景的人有他们独特的生活方式,独特的沟通方式。你可以用他们的沟通方式与他们交谈,并使用他们容易理解和乐意回复的内容与他们沟通。

    你越深入接触他们并与该群体进行沟通,你的业务就会越多。即使在你提供的免费分享内容中,也应该体现出你是在提供这些群体他们需要的内容。

    细心观察一些大品牌和公司,你会发现他们如何满足他们特定的目标客户群。

    这就是高端品牌一般不主动推销的原因,因为这不是他们的目标客户所容易接受的。

    3.明确这一切的进展情况

    与明确你为什么要做这些事一样,你应该清楚你的生活和事业的方。如果你没有明确你的人生目标,就很难专注于建立你的业务。你建立一个企业来为生活创造自由和财务安全。

    你的梦想生活是什么样的?如果钱不是目的,理想的一天会是什么样子?让你的大脑想象一下这一切的进展。

    要想到达任何地方,你必须知道目的地的样子。

    今天花一些时间来弄清楚。如果你很明白这些,请再花一些时间重新梳理目标。

    结论

    目标明确是一种力量。

    它可以帮助你成功达到目标,实现财富和梦想。当有100件事要做时,我们的重点往往是需要完成的工作。改变你的心态,像领导者一样思考。

    明确策略以及它们如何连接在一起,然后,制定策略并采取行动,一旦明白,你就可以体验到爆炸式增长。

    在这里插入图片描述
    本文由 陈雪波/作者 原创于(狼羽:lymind0)公众号 网站:www.lymind.com

    展开全文
  • 本文会讲新用户留存的重要,以及执行框架思路。一、什么是用户增长先说一下什么是用户增长,可能我的理解和其他人不太一样。用户增长,从国外的理念来讲,就是AARRR模型(如下图)。从国内的角度来说,用户增长还有...

    作者:韩叙HanXu

    来源:运营狗工作日记(ID:yunyingriji)

    本文为作者授权鸟哥笔记发布,转载请联系作者并注明出处。

    新增用户的留存,是用户增长里非常重要的一环,却很容易被忽视。本文会讲新用户留存的重要性,以及执行框架思路。

    一、什么是用户增长

    先说一下什么是用户增长,可能我的理解和其他人不太一样。用户增长,从国外的理念来讲,就是AARRR模型(如下图)。

    从国内的角度来说,用户增长还有一部分价值在于,是一套工作方法,是一种团队协作形式。

    而且,因为国内互联网环境和用户习惯,与国外有非常大的差异,所以AARRR模型中,获取、激活、推荐这三块,国内外的理解是不同的。

    比如国外就没有运营或渠道团队,主要就是产品、研发、市场;国外也没有这么多渠道的玩法,也没有国内这种多样化的用户构成,差别太大了。这就是为什么你看了很多国外牛逼的案例,但在国内完全不可行的原因。

    所以,用户增长这个概念,我们可以用,但要做好「本土化」。

    用户增长,首先是一套工作方法。

    举例我是公司老板,我希望app的DAU能提升,这样做商业化变现,公司才能赚更多的钱,这是整体目标。

    活动运营对我说,他做活动的目标是UV,活动的UV多了,DAU就会涨吧。

    用户运营对我说,他的目标是维护更多的核心用户,让他们有更多的贡献量或者活跃度,有了核心用户的带动,DAU就会涨吧。

    产品经理对我说,他的目标是所负责那个产品模块的UV,或者在DAU中的占比,这俩数值越高,DAU就会涨吧。

    但在我看来,活动UV、核心用户活跃、某个产品模块的DAU占比,这三个数字完全不在一个方向上,不是统一纬度。就好比大家一起推车,不是往同一个方向发力,效率会很低。

    用户增长就保证全公司,或者至少有那么一撮人,只做能明确带来增长的事,方向和目标非常一致。不能带动增长或无法被量化证明的事,就不做。

    用户增长,其次是一种团队协作形式。

    传统互联网团队是这样分工的,产品经理、运营、研发、设计、市场、渠道、销售各为独立团队,各自有老大管理。

    这样分工只是单纯的「类聚」,把相同工种的人放在一起,再从中找一个比较厉害的人负责管理。除此之外,好像没找到其他理由。

    但实际上相同工种的人协作是比较少的,再多的产品经理凑一块也没办法把一个功能搞上线。所以,其实协作更多的是产品+运营+设计+研发,这样的项目组。

    可这几个角色在不同的团队,可能有不同的KPI,就会带来协作成本,降低工作效率。

    从另一方面来看,这样垂直团队的设置还会带来「谷仓效应」,如下图。各自为战,垂直可以足够深,但横向协作很少。每个人只看着自己的一亩三分地,也会影响工作效率。

    用户增长,就是用一种相同目标、跨团队的协作形式,把各部门串联起来,打破这种谷仓效应。

    对用户增长的理解,容易出现的误区有两个。

    首先,用户增长不是秘籍和捷径。老板们不要拿来这个概念放到自己团队里,就可以坐等数据的快速提升。这不是一招一式的事,也没有那么神秘,只是一种思路而已。

    其次,不要狭隘的认为「裂变」就是增长的全部,以偏概全。用户增长是AARRR模型,裂变算是第一个A的方式之一。也就是说,获客有很多形式,之前有渠道投放、活动拉新等,如今多了一个裂变。

    有把「裂变」玩法鼓吹成「用户增长」而从中牟利的现象,大家不要被误导。

    二、为什么做新用户的留存

    新用户的留存,在AARRR模型里,就是「激活」这一步(如上图),只是国内很少有人这么叫。

    为什么说新用户留存重要,先讲个故事(上图)。

    想像你开了一个小饭馆,当第一桌客人来的时候,你肯定会尽全力用最好的服务、最优的饭菜去对待他们,临走的时候没准还给一张优惠券,下次来可以打折。

    因为你知道,这第一桌客人非常重要。如果他们吃得满意,之后才会多次的来消费,顾客本来就是积少成多的过程;他们也会推荐给身边的人,饭馆本来就是服务周边的事;他们还可能给一些反馈,帮助你改进好服务。

    这第一桌客人,对于你来说,就是新用户。他们第一次的感受就非常重要,就是你需要重点做好的。

    同理,我们做好互联网产品的新用户留存,也是非常重要的。有两个原因:

    1.新用户留存做的好,会带来整体留存用户的提升,也会避免获客成本的浪费。

    举例(见下图),有两个渠道来获取用户,每天带来的新增用户都是1W。渠道1的次日留存是40%,那么第二天还在活跃的用户就剩4K;渠道2的次日留存是30%,第二天还在活跃的就剩3K。

    那么渠道1带来的全部活跃用户数,就是下图中黄色+黑色的面积;渠道2带来的全部活跃用户数,就是下图中黑色的面积,可明显看出,前者面积大于后者。

    面积大小的决定性因素,就是次日留存那个点(图中第二天的留存用户,绿点)。所以,次留很重要,决定某个渠道的整体活跃用户量。

    除此之外,从成本角度来讲,次留数据的高低,也决定了次留成本的差异。从下图就能看出成本的差距有多大(下图)。

    如果次留本能做到50%,但你只做到10%,次留成本相差有80元/个,这就是浪费的那部分成本。

    2.新用户由于访问路径相对单一,留存策略更容易落地,也更聚焦。

    新用户使用产品的方式,绝大部分是主动打开,使用路径相对单一。所以只针对这一个路径去优化就好,更聚焦,效率更高。

    另外,还可以根据渠道来源去做用户的精细化运营,部分渠道是可以拿到用户的人口属性(性别、地域、兴趣偏好等),这就是精细化的决策依据。

    三、新用户留存的主线

    用户增长的主线是AARRR模型,新用户留存的主线就是从产品启动到关键行为的转化(如下图)。

    1.产品启动

    产品启动是用户使用一个产品的源头,是第一步。就是用户在应用市场或Appstore下载安装后,打开客户端。

    绝大多数是这样访问的路径,除此之外还有,通过外部渠道带来的,外部落地页是内容或商品的详情页,可触发点击到下载安装和激活,激活后仍然会落地到相同的页面,只是在端内看到的。

    2.关键行为

    内容型产品,关键行为就是内容消费,如阅读;电商类产品,关键行为就是到新客的转化,也就是第一个订单的完成。

    这个关键行为有点像aha moment,如Facebook的「7天内加10个好友」、Dropbox的「上传第一个文件」等。这些都是国外的案例,国内其实很少有能确切算出aha这个数值的,因为情况并没那么理想化。

    但这并不意味着我们不能继续。做用户增长,还有一个最重要的素质就是灵活判断、快速推荐,不能特别依赖数据。因为没有那么及时和完备的数据给你,你也没时间去等。所以能大概确定一个关键行为指标就可以了,就可以去做功了。

    四、制定指标的常见问题

    制定指标是用户增长里非常重要的工作,因为你需要通过指标,把不同团队的成员捏合在一起,最好还能覆盖到大家的原有指标,达成共赢。如果没有共同的指标,或者大家并不认可,那这个项目组基本上就是名存实亡。

    制定合理目标有两个要素(上图):

    1.从整体产品获公司目标拆解得来

    比如上文提到,假设公司的目标是收入,这也是绝大多数公司的目标。完成这个目标,就需要有足够基数的活跃用户,以及商业变现的能力,两者缺一不可。

    足够基数的活跃用户,假设就是DAU。这就是从整体收入目标,到DAU和商业化变现的一层拆解。

    接下来继续拆,DAU又可拆解为新增活跃用户+老用户的留存。所以,新增活跃用户,就是本文讲的这部分。

    捋一下就是:以「公司收入」为北极星指标。

    第一层拆解:公司收入=用户数(DAU)+变现能力

    第二层拆解:用户数(DAU)=新增活跃用户+老用户留存

    第三层拆解:新增活跃用户=新增用户*新增用户留存率

    本文讲的就是,如何提升「新增用户的留存率」。

    不能接受的是没有共同的核心指标,各个角色之间的指标没有逻辑上的关联。目标拆解不清晰,到具体执行的时候就会出现偏差。

    2.多个指标的相互约束和牵制

    制定的指标不能是单一的,是需要多个指标构成约束和牵制,才能确定这个措施是否真正带来增长。

    举例,你负责push模块,给你制定了「push打开用户数」这样的单一指标。那很简单,你多发几条push,或者多发标题党、三俗的内容,这个指标就会提升,但用户满意度以及后续的时长、留存会下降。所以,push的指标应该是多个的,如打开用户数、打开率、对DAU的贡献等。

    再举例,你负责某个产品模块,给你制定了产品模块的访问用户数作为指标。那么你重点要做的就会变成,提高这个模块的曝光,申请更多资源,而不是做好产品的体验。

    因此,新用户留存的指标可以定三个,分别是新增用户量、次日留存、获客成本。因为新增用户量和次留是成反比的,如果为了达成后者的提升,降低前者就可完成。

    但如果目标是新增活跃用户的提升,如上文拆解公式所说:新增活跃用户=新增用户*新增用户留存率,所以需要新增用户和留存率都提升。

    五、做好新用户留存的方法

    大体分为四类方法,分别是:用户运营的精细化、产品流程优化、活动激励、提供优质的服务。(下图)

    按照从启动到关键行为转化的这个主线,上面四类方法其实是串行的流程。

    第一步:将获客渠道精细化,针对不同的渠道做针对性的用户运营,同时也可以做渠道的筛选,来获取优质流量。

    第二步:将获取的流量,更高效的转化到关键行为的使用。就需要做产品流程的优化,提升每一步转化率。

    第三步:为了提升每一步转化率,还可以通过活动的激励,引导用户转化。

    第四步:用户完成关键行为时,产品要提供最优质的服务。只有用户满意,才会有后续的留存。

    下面详细说这四步:

    1.精细化运营

    首先,精细化运营是找到和分析用户的来源,将决策环节前置,我们可以获得不同来源用户的不同特征。

    比如信息流渠道,可以按照固定人群去做定向投放,在圈定用户的同时,也能获得人群的属性。这样就可以针对这部分群体,做对应的留存策略。女性+一二线城市+兴趣点的用户,推荐什么内容或商品转化好,都是可以有目的的尝试。

    其次,也可以通过活动的形式,去做精细化用户运营。被某类活动激励后的用户,就可以认为这类用户的需求。

    比如,一个书+电影+音乐的活动,有部分用户只参与了读书那部分,就可以认为这部分用户的兴趣是书。回到客户端后,就可以定向推荐书相关的内容或商品。

    再比如,一个红包类的活动把一批用户拉进来了,可以认为这部分用户都是逐利的。回到客户端后,就可以再推送逐利类的活动,引导用户继续留存,如上图。

    2.产品流程优化

    要提升产品启动到关键行为的转化率,就要把每一步都列出来,看转化率有哪些可以提升空间。

    举例,今日头条和手机百度这样的大流量产品,为什么没有收集用户兴趣点的环节?因为让用户填写兴趣点,推荐就可以更精准。

    如下图左边2个页面截图,就在收集兴趣点;而右边UC和喜马拉雅,就把收集兴趣点的入口缩小,点击可以设置,也可以忽略,不占页面位置。

    从逻辑上来讲,产品多一步操作,就会多一次流失。只是要衡量多这一步的收益,与流失之间,哪个更值得。从今日头条的情况来看,收集兴趣点这件事肯定是负向的。

    这只是一个案例,是新用户从启动到关键行为转化的一步,只有都拆解出来看,才知道问题是否存在。

    3.活动激励

    通过活动激励,引导新用户产生关键行为,从而留存。以美团app为案例分析,见下图。

    新用户的操作流程见上图,先获得的是外卖的红包,领取后回到美团app,又看到新客的红包弹窗,关掉弹窗后又看到新人专享礼包,每一步都有活动的引导。

    再加上本来用户对美团的理解就是「优惠」,所以这样的活动也是符合用户预期的。

    4.优质的服务

    当新用户在使用产品时,要拿出最优质的服务或商品,抓住最重要的这次机会去留存这批用户。就像上文开饭馆的例子,客人第一次来吃饭,得拿出最好的饭菜水平,让客人满意,才会有第二次消费。

    我想,饭店的菜单里会把特色菜放在前面,原因之一就是这个吧。老客人不需要看菜单也知道吃什么,新来的客人不知道怎么点菜,所以才把最优质的放在菜单的最前面。做互联网产品也是一样的。

    上图三个页面分别是未登录状态的微博、知乎和贴吧。因为未登录,产品也不知道用户是谁,有啥特征,所以就把产品里最热门、最优质的内容推出来。

    六、做用户增长时的常见问题

    1.数据基础差

    有朋友说,公司里根本没有那么多数据可参考,这增长就没办法做。我不这么认为,因为绝大部分公司的数据基础都很差,这就是现状,首先要接受。

    其次,数据只是参考的依据,是衡量效果的工具,但不是决定产品生死的因素。我经常说,如果数据什么都能给你,还要我们干嘛?

    数据基础差,就一点点去建立。去建数据平台,去梳理口径,去制定流程等等,只要你坚持做下去,有半年或一年的时间,就会有明显的改善。

    这本身也是用户增长要做的事,不能指望别人把菜都切好了等你炒。

    2.缺乏增长的方法

    首先,抓住主线。比如用户增长的主线是AARRR,新用户留存主线是从启动到关键行为的转化。只要有了主线,逐步逐层去拆解,去解决问题,见招拆招,自然就有了增长的方法。

    其次,多于同行交流,吸取别人的经验,在一脸懵逼的时候可以先拿来主义。

    3.没有合适的人才

    本身也没有用户增长的专门人才,都是半路转行的。我们可以从产品、运营中筛选合适的。必备素质是有产品思维,有数据分析能力,目标导向极强,有很强的推动力。

    4.公司内协作效率低

    在用户增长初期,内部推动难是非常正常的。首先,大家理解这个事需要过程,都觉得这只是一个概念。需要慢慢建立增长的文化,去加强理解。

    其次,用户增长经常是在「干别人的活」。同事们可能会觉得,我干的好好的,凭什么听你指手画脚。

    所以,用户增长要自上而下的推动,老板一定要认可这件事。否则,基本上很难做下去。

    福利

    扫码关注鸟哥笔记公众号,每日收获精选好文。

    现在关注,回复关键词【新人礼包】即可获得鸟哥笔记福利礼包,内含运营人必备大礼包【商务PPT模板80份+超全活动策划方案500份+运营简历超大合集1000份】。

    手慢无!

    | 延伸阅读

    展开全文
  • 项目需要进行MongoDb转换,查了一些资料,整理好后以便查阅ObjectId的选择创建MongoDB文档,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成。得到的ObjectId类似于这种ObjectId使用12字节...

    项目需要进行MongoDb转换,查了一些资料,整理好后以便查阅

    ObjectId的选择

    创建MongoDB文档时,如果没有赋值ID,系统会自动帮你创建一个,通常会在客户端由驱动程序完成。得到的ObjectId类似于这种

    ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。其含义分别代表时间戳、机器码、PID、计数器。时间戳是文档创建时的时间,只是从十进制转化成了十六进制。机器码是生成文档主机的ID,为了区分多主机而生成的。PID则是区分同主机下不同mongoDB进程产生的,同样防止冲突。前面的9个字节是保证了一秒内不同机器不同进程生成ObjectId不冲突,最后的3个字节是一个自动增加的计数器,用来确保在同一秒内产生的ObjectId也不会冲突,允许256的3次方等于16777216条记录的唯一性。

    显然系统生成的ObjectID已经很严谨了,但是在选择系统创建还是程序创建id上,经过网上查找的一些资料,得到的结论是尽量采用程序创建的方式,速度、可读性、可维护性都要强于系统创建。虽然ObjectId 设计成轻量型的,易于生成,但是毕竟生成的时候还是产生开销。在客户端生成体现了MongoDB 的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。这种理念背后的原因是,即便是像MongoDB 这样的可扩展数据库,扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。

    在客户端生成ObjectId,驱动程序能够提供更加丰富的API。例如,驱动程序可以有自己的insert 方法,可以返回生成的ObjectId,也可以直接将其插入文档。如果驱动程序允许服务器生成ObjectId,那么将需要单独的查询,以确定插入的文档中的"_id" 值。

    设计思路

    创建一个序列计数的文档,记录所有文档的名称和序列值,序列值设置默认0,每次进行插入操作的时候,序列值+1,作为本次操作的id。

    程序实现

    开发环境:IntelliJ IDEA+JAVA8+SpringBoot

    1 创建序列计数类,用于存储各文档以及文档序列值。

    2 自定义注解

    3 定义实体类(get、set),与文档一一对应

    4 定义监听类SaveEventListener。重写save方法。在每次存储时候进行主键自增

    5 单元测试

    测试结果

    测试成功,id实现自动增长

    ----

    参考博客

    展开全文
  • 面对超高的并发,首先硬件层面机器要能扛得住,其次架构设计做好微服务的拆分,代码层面各种缓存、削峰、解耦等等问题要处理好,数据库层面做好读写分离、分库分表,稳定方面要保证有监控,熔断限流降级该有的必须...

    围绕支撑高并发的业务场景怎么设计系统才合理?

    面对超高的并发,首先硬件层面机器要能扛得住,其次架构设计做好微服务的拆分,代码层面各种缓存、削峰、解耦等等问题要处理好,数据库层面做好读写分离、分库分表,稳定性方面要保证有监控,熔断限流降级该有的必须要有,发生问题能及时发现处理。这样从整个系统设计方面就会有一个初步的概念。

    微服务架构演化

    在互联网早期的时候,单体架构就足以支撑起日常的业务需求,大家的所有业务服务都在一个项目里,部署在一台物理机器上。所有的业务包括你的交易系统、会员信息、库存、商品等等都夹杂在一起,当流量一旦起来之后,单体架构的问题就暴露出来了,机器挂了所有的业务全部无法使用了。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    于是,集群架构的架构开始出现,单机无法抗住的压力,最简单的办法就是水平拓展横向扩容了,这样,通过负载均衡把压力流量分摊到不同的机器上,暂时是解决了单点导致服务不可用的问题。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    但是随着业务的发展,在一个项目里维护所有的业务场景使开发和代码维护变得越来越困难,一个简单的需求改动都需要发布整个服务,代码的合并冲突也会变得越来越频繁,同时线上故障出现的可能性越大。微服务的架构模式就诞生了。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    把每个独立的业务拆分开独立部署,开发和维护的成本降低,集群能承受的压力也提高了,再也不会出现一个小小的改动点需要牵一发而动全身了。

    以上的点从高并发的角度而言,似乎都可以归类为通过服务拆分和集群物理机器的扩展提高了整体的系统抗压能力,那么,随之拆分而带来的问题也就是高并发系统需要解决的问题。

    RPC

    微服务化的拆分带来的好处和便利性是显而易见的,但是与此同时各个微服务之间的通信就需要考虑了。传统HTTP的通信方式对性能是极大的浪费,这时候就需要引入诸如Dubbo类的RPC框架,基于TCP长连接的方式提高整个集群通信的效率。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    我们假设原来来自客户端的QPS是9000的话,那么通过负载均衡策略分散到每台机器就是3000,而HTTP改为RPC之后接口的耗时缩短了,单机和整体的QPS就提升了。而RPC框架本身一般都自带负载均衡、熔断降级的机制,可以更好的维护整个系统的高可用性。

    那么说完RPC,作为基本上国内普遍的选择Dubbo的一些基本原理就是接下来要了解的。

    Dubbo工作原理

    1. 服务启动的时候,provider和consumer根据配置信息,连接到注册中心register,分别向注册中心注册和订阅服务
    2. register根据服务订阅关系,返回provider信息到consumer,同时consumer会把provider信息缓存到本地。如果信息有变更,consumer会收到来自register的推送
    3. consumer生成代理对象,同时根据负载均衡策略,选择一台provider,同时定时向monitor记录接口的调用次数和时间信息
    4. 拿到代理对象之后,consumer通过代理对象发起接口调用
    5. provider收到请求后对数据进行反序列化,然后通过代理调用具体的接口实现

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    Dubbo负载均衡策略

    1. 加权随机:假设我们有一组服务器 servers = [A, B, C],他们对应的权重为 weights = [5, 3, 2],权重总和为10。现在把这些权重值平铺在一维坐标值上,[0, 5) 区间属于服务器 A,[5, 8) 区间属于服务器 B,[8, 10) 区间属于服务器 C。接下来通过随机数生成器生成一个范围在 [0, 10) 之间的随机数,然后计算这个随机数会落到哪个区间上就可以了。
    2. 最小活跃数:每个服务提供者对应一个活跃数 active,初始情况下,所有服务提供者活跃数均为0。每收到一个请求,活跃数加1,完成请求后则将活跃数减1。在服务运行一段时间后,性能好的服务提供者处理请求的速度更快,因此活跃数下降的也越快,此时这样的服务提供者能够优先获取到新的服务请求。
    3. 一致性hash:通过hash算法,把provider的invoke和随机节点生成hash,并将这个 hash 投射到 [0, 2^32 - 1] 的圆环上,查询的时候根据key进行md5然后进行hash,得到第一个节点的值大于等于当前hash的invoker。
    4. 加权轮询:比如服务器 A、B、C 权重比为 5:2:1,那么在8次请求中,服务器 A 将收到其中的5次请求,服务器 B 会收到其中的2次请求,服务器 C 则收到其中的1次请求。

    集群容错

    1. Failover Cluster失败自动切换:dubbo的默认容错方案,当调用失败时自动切换到其他可用的节点,具体的重试次数和间隔时间可用通过引用服务的时候配置,默认重试次数为1也就是只调用一次。
    2. Failback Cluster快速失败:在调用失败,记录日志和调用信息,然后返回空结果给consumer,并且通过定时任务每隔5秒对失败的调用进行重试
    3. Failfast Cluster失败自动恢复:只会调用一次,失败后立刻抛出异常
    4. Failsafe Cluster失败安全:调用出现异常,记录日志不抛出,返回空结果
    5. Forking Cluster并行调用多个服务提供者:通过线程池创建多个线程,并发调用多个provider,结果保存到阻塞队列,只要有一个provider成功返回了结果,就会立刻返回结果
    6. Broadcast Cluster广播模式:逐个调用每个provider,如果其中一台报错,在循环调用结束后,抛出异常。

    消息队列

    对于MQ的作用大家都应该很了解了,削峰填谷、解耦。依赖消息队列,同步转异步的方式,可以降低微服务之间的耦合。

    对于一些不需要同步执行的接口,可以通过引入消息队列的方式异步执行以提高接口响应时间。在交易完成之后需要扣库存,然后可能需要给会员发放积分,本质上,发积分的动作应该属于履约服务,对实时性的要求也不高,我们只要保证最终一致性也就是能履约成功就行了。对于这种同类性质的请求就可以走MQ异步,也就提高了系统抗压能力了。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    对于消息队列而言,怎么在使用的时候保证消息的可靠性、不丢失?

    消息可靠性

    消息丢失可能发生在生产者发送消息、MQ本身丢失消息、消费者丢失消息3个方面。

    生产者丢失

    生产者丢失消息的可能点在于程序发送失败抛异常了没有重试处理,或者发送的过程成功但是过程中网络闪断MQ没收到,消息就丢失了。

    由于同步发送的一般不会出现这样使用方式,所以我们就不考虑同步发送的问题,我们基于异步发送的场景来说。

    异步发送分为两个方式:异步有回调和异步无回调,无回调的方式,生产者发送完后不管结果可能就会造成消息丢失,而通过异步发送+回调通知+本地消息表的形式我们就可以做出一个解决方案。以下单的场景举例。

    1. 下单后先保存本地数据和MQ消息表,这时候消息的状态是发送中,如果本地事务失败,那么下单失败,事务回滚。
    2. 下单成功,直接返回客户端成功,异步发送MQ消息
    3. MQ回调通知消息发送结果,对应更新数据库MQ发送状态
    4. JOB轮询超过一定时间(时间根据业务配置)还未发送成功的消息去重试
    5. 在监控平台配置或者JOB程序处理超过一定次数一直发送不成功的消息,告警,人工介入。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    一般而言,对于大部分场景来说异步回调的形式就可以了,只有那种需要完全保证不能丢失消息的场景我们做一套完整的解决方案。

    MQ丢失

    如果生产者保证消息发送到MQ,而MQ收到消息后还在内存中,这时候宕机了又没来得及同步给从节点,就有可能导致消息丢失。

    比如RocketMQ:RocketMQ分为同步刷盘和异步刷盘两种方式,默认的是异步刷盘,就有可能导致消息还未刷到硬盘上就丢失了,可以通过设置为同步刷盘的方式来保证消息可靠性,这样即使MQ挂了,恢复的时候也可以从磁盘中去恢复消息。

    消费者丢失

    消费者丢失消息的场景:消费者刚收到消息,此时服务器宕机,MQ认为消费者已经消费,不会重复发送消息,消息丢失。

    RocketMQ默认是需要消费者回复ack确认,而kafka需要手动开启配置关闭自动offset。

    消费方不返回ack确认,重发的机制根据MQ类型的不同发送时间间隔、次数都不尽相同,如果重试超过次数之后会进入死信队列,需要手工来处理了。(Kafka没有这些)

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    消息的最终一致性

    事务消息可以达到分布式事务的最终一致性,事务消息就是MQ提供的类似XA的分布式事务能力。

    半事务消息就是MQ收到了生产者的消息,但是没有收到二次确认,不能投递的消息。

    实现原理如下:

    1. 生产者先发送一条半事务消息到MQ
    2. MQ收到消息后返回ack确认
    3. 生产者开始执行本地事务
    4. 如果事务执行成功发送commit到MQ,失败发送rollback
    5. 如果MQ长时间未收到生产者的二次确认commit或者rollback,MQ对生产者发起消息回查
    6. 生产者查询事务执行最终状态
    7. 根据查询事务状态再次提交二次确认

    最终,如果MQ收到二次确认commit,就可以把消息投递给消费者,反之如果是rollback,消息会保存下来并且在3天后被删除。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    数据库

    对于整个系统而言,最终所有的流量的查询和写入都落在数据库上,数据库是支撑系统高并发能力的核心。怎么降低数据库的压力,提升数据库的性能是支撑高并发的基石。主要的方式就是通过读写分离和分库分表来解决这个问题。

    对于整个系统而言,流量应该是一个漏斗的形式。比如我们的日活用户DAU有20万,实际可能每天来到提单页的用户只有3万QPS,最终转化到下单支付成功的QPS只有1万。那么对于系统来说读是大于写的,这时候可以通过读写分离的方式来降低数据库的压力。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    读写分离也就相当于数据库集群的方式降低了单节点的压力。而面对数据的急剧增长,原来的单库单表的存储方式已经无法支撑整个业务的发展,这时候就需要对数据库进行分库分表了。针对微服务而言垂直的分库本身已经是做过的,剩下大部分都是分表的方案了。

    水平分表

    首先根据业务场景来决定使用什么字段作为分表字段(sharding_key),比如我们现在日订单1000万,我们大部分的场景来源于C端,我们可以用user_id作为sharding_key,数据查询支持到最近3个月的订单,超过3个月的做归档处理,那么3个月的数据量就是9亿,可以分1024张表,那么每张表的数据大概就在100万左右。

    比如用户id为100,那我们都经过hash(100),然后对1024取模,就可以落到对应的表上了。

    分表后的ID唯一性

    因为我们主键默认都是自增的,那么分表之后的主键在不同表就肯定会有冲突了。有几个办法考虑:

    1. 设定步长,比如1-1024张表我们分别设定1-1024的基础步长,这样主键落到不同的表就不会冲突了。
    2. 分布式ID,自己实现一套分布式ID生成算法或者使用开源的比如雪花算法这种
    3. 分表后不使用主键作为查询依据,而是每张表单独新增一个字段作为唯一主键使用,比如订单表订单号是唯一的,不管最终落在哪张表都基于订单号作为查询依据,更新也一样。

    主从同步原理

    1. master提交完事务后,写入binlog
    2. slave连接到master,获取binlog
    3. master创建dump线程,推送binglog到slave
    4. slave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中
    5. slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
    6. slave记录自己的binglog

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生一个问题就是假设主库挂了,从库处理失败了,这时候从库升为主库后,日志就丢失了。由此产生两个概念。

    全同步复制

    主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方式的话性能会受到严重影响。

    半同步复制

    和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库收到至少一个从库的确认就认为写操作完成。

    缓存

    缓存作为高性能的代表,在某些特殊业务可能承担90%以上的热点流量。对于一些活动比如秒杀这种并发QPS可能几十万的场景,引入缓存事先预热可以大幅降低对数据库的压力,10万的QPS对于单机的数据库来说可能就挂了,但是对于如redis这样的缓存来说就完全不是问题。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    以秒杀系统举例,活动预热商品信息可以提前缓存提供查询服务,活动库存数据可以提前缓存,下单流程可以完全走缓存扣减,秒杀结束后再异步写入数据库,数据库承担的压力就小的太多了。当然,引入缓存之后就还要考虑缓存击穿、雪崩、热点一系列的问题了。

    热key问题

    所谓热key问题就是,突然有几十万的请求去访问redis上的某个特定key,那么这样会造成流量过于集中,达到物理网卡上限,从而导致这台redis的服务器宕机引发雪崩。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    针对热key的解决方案:

    1. 提前把热key打散到不同的服务器,降低压力
    2. 加入二级缓存,提前加载热key数据到内存中,如果redis宕机,走内存查询

    缓存击穿

    缓存击穿的概念就是单个key并发访问过高,过期时导致所有请求直接打到db上,这个和热key的问题比较类似,只是说的点在于过期导致请求全部打到DB上而已。

    解决方案:

    1. 加锁更新,比如请求查询A,发现缓存中没有,对A这个key加锁,同时去数据库查询数据,写入缓存,再返回给用户,这样后面的请求就可以从缓存中拿到数据了。
    2. 将过期时间组合写在value中,通过异步的方式不断的刷新过期时间,防止此类现象。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    缓存穿透

    缓存穿透是指查询不存在缓存中的数据,每次请求都会打到DB,就像缓存不存在一样。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    针对这个问题,加一层布隆过滤器。布隆过滤器的原理是在你存入数据的时候,会通过散列函数将它映射为一个位数组中的K个点,同时把他们置为1。

    这样当用户再次来查询A,而A在布隆过滤器值为0,直接返回,就不会产生击穿请求打到DB了。

    显然,使用布隆过滤器之后会有一个问题就是误判,因为它本身是一个数组,可能会有多个值落到同一个位置,那么理论上来说只要我们的数组长度够长,误判的概率就会越低,这种问题就根据实际情况来就好了。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    缓存雪崩

    当某一时刻发生大规模的缓存失效的情况,比如你的缓存服务宕机了,会有大量的请求进来直接打到DB上,这样可能导致整个系统的崩溃,称为雪崩。雪崩和击穿、热key的问题不太一样的是,他是指大规模的缓存都过期失效了。

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    针对雪崩几个解决方案:

    1. 针对不同key设置不同的过期时间,避免同时过期
    2. 限流,如果redis宕机,可以限流,避免同时刻大量请求打崩DB
    3. 二级缓存,同热key的方案。

    稳定性

    我要进阿里之业务量增长10倍、100倍你的系统该如何设计?

    熔断

    比如营销服务挂了或者接口大量超时的异常情况,不能影响下单的主链路,涉及到积分的扣减一些操作可以在事后做补救。

    限流

    对突发如大促秒杀类的高并发,如果一些接口不做限流处理,可能直接就把服务打挂了,针对每个接口的压测性能的评估做出合适的限流尤为重要。

    降级

    熔断之后实际上可以说就是降级的一种,以熔断的举例来说营销接口熔断之后降级方案就是短时间内不再调用营销的服务,等到营销恢复之后再调用。

    预案

    一般来说,就算是有统一配置中心,在业务的高峰期也是不允许做出任何的变更的,但是通过配置合理的预案可以在紧急的时候做一些修改。

    核对

    针对各种分布式系统产生的分布式事务一致性或者受到攻击导致的数据异常,非常需要核对平台来做最后的兜底的数据验证。比如下游支付系统和订单系统的金额做核对是否正确,如果收到中间人攻击落库的数据是否保证正确性。

    总结

    其实可以看到,怎么设计高并发系统这个问题本身他是不难的,无非是基于你知道的知识点,从物理硬件层面到软件的架构、代码层面的优化,使用什么中间件来不断提高系统的抗压能力。但是这个问题本身会带来更多的问题,微服务本身的拆分带来了分布式事务的问题,http、RPC框架的使用带来了通信效率、路由、容错的问题,MQ的引入带来了消息丢失、积压、事务消息、顺序消息的问题,缓存的引入又会带来一致性、雪崩、击穿的问题,数据库的读写分离、分库分表又会带来主从同步延迟、分布式ID、事务一致性的问题,而为了解决这些问题我们又要不断的加入各种措施熔断、限流、降级、离线核对、预案处理等等来防止和追溯这些问题。

    展开全文
  • 增长黑客现在是初创公司和一些互联网公司都关注的游戏了。...现在,创业营销需要超越传统的广告方法,应该包括程序,设计,创造思维和聪明才智。 增长黑客的工作是利用人类心理学和工程学来推动..
  • 如今,短视频成了人们的新宠,闲暇大家总是习惯地拿出手机“刷刷刷”。而在众多短视频应用中,坚持“记录生活,记录你”的快手一直颇受大家青睐。     备受喜爱的背后,是北京快手科技有限公司强大的技术...
  • 当数据呈指数增长时,数据备份时间也将随着数据量的增长而加长,这样就很难实现高效的数据保护。对于超大型Mysql/Oracle数据库的保护一直是业界的难题,尤其是如何在较短的时间内,完成数据的备份和有效验证。...
  • 当数据呈指数增长时,数据备份时间也将随着数据量的增长而加长,这样就很难实现高效的数据保护。对于超大型Mysql/Oracle数据库的保护一直是业界的难题,尤其是如何在较短的时间内,完成数据的备份和有效验证。...
  • 本文将用一个有趣的故事为例,从多个角度不断地帮助大家深入分析如何用数据来打造超级产品的可行。 2020年已经过了差不多一半的时间,其中对于2020下半年的规划,有一项令人头疼的任务,那就是如何打造超级产品...
  • 3)分析发生机场发展区域发展计划如何考虑机场。 为此,二手数据用于分析将经济指标与机场使用联系起来的当前增长方式。 通过使用各种数据库和导航软件来评估每个小型机场的交通网络可及。 这项研究的总体结论...
  • 这就需要企业管理者如何看待超级产品战略中的超级产品增长,一般增长分为长期和阶段、普遍和特殊。企业需要专注于现阶段的增长目标,但同时不能忘记为下一个阶段的增长做准备,否则一增长可能只是...
  • 然而,由于经济系统的复杂,人们很难运用基于受控对象精确信息的控制方法来设计合理的增长路径.自抗扰控制(ADRC)是一种独立于模型的误差反馈控制方法,其自然地反映了理性人的决策思维.本文首先对比了当经济增长...
  • 更短的开发周期、不断缩小的尺寸、新的材料和更大的芯片正造成MSD数量的迅速增长和潮湿/回流敏感水平更高。,诸如BGA、CSP这类面积排列封装的使用量增长也已经有重大影响。这是因为这些元件倾向于封装在盘带(tape-...
  • 你是否正在寻找一些简单有效的增长黑客来推动你的业务增长而发愁?...2019年5G将会到来,这意味这我们的信息流程度还会加深,当我们的品牌还未出名如何通过互联网的平台让更多的人知道我们了解...
  • 当涉及到固有的多样性时,尤其如此:性别,年龄,种族和性取向等特征。 很难真实地了解我们社区各个方面的多样性。 性别多样性由于明显缺乏并且更容易衡量,因此是衡量技术社区多样性的出发点和当前标准。 例如...
  • 信息量的增多,直接导致了,我们的每天在做决策的时候,选择的增多,如何在决策判断,保持理性,是我们目前面临的一大问题。 常见的思维决策误区 个人见证的误区 在生活中,亲朋好友的一个推荐都会影响到我们的...
  • 辩论赛技巧之辩论时如何削弱对方的观点 辩论赛是我们校园最常举办的大赛之一,大家在参加辩论赛都需要掌握一些技巧。下面是小编搜集整理的辩论赛技巧之辩论时如何削弱对方的观点,欢迎阅读。更多资讯请继续关注...
  • 概述之前我们使用MySQL等关系型数据库,主键都是设置成自增的但在分布式环境下,尤其是在分库分表以后,单纯的自增主键会产生冲突,需要考虑如何生成唯一ID这一点上,mongodb预先考虑到并采取措施保证了分布式环境...
  • 辩论赛技巧—辩论时如何削弱对方的观点 辩论赛技巧—辩论时如何削弱对方的观点 小编认为,只要在辩论削弱对方的论点与论据间的关系,就能在与对方辩论使对方的观点显得苍白,从而使自身的观点得到加强。...
  • 风险缓和:通过降低风险发生的可能,或者降低风险发生的严重,来降低风险的影响。 风险管理:在解决风险和缓和风险之间做出选择。 比赛日:通过测试来触发系统中某个失败模型,然后观察你的操作人员和工程师...
  • 国内知名化妆品品牌欧诗漫,在美白淡斑面膜新品推广中,仅用2周就吸引了15万人...01欧诗漫的裂变增长设计内核谈及为何能取得如此漂亮的成绩单,欧诗漫相关负责人表示,洞察人性,知己知彼,巧借外力。合理设计用户...
  • 这项研究检查了Saipem Contracting Nigeria Limited实施的人力资源管理(HRM)做法如何在遵守尼日利亚本地内容法方面促进其组织发展。 问题陈述,研究目的,研究问题,假设和范围涉及以下方面:确定Saipem的人力资源...
  • 前言:本文分析了加密市场中比特币与其他代币资产之间可能的相关关系,当市场处于不同的周期,代币之间产生不同的影响。比如比特币呈现抛物线增长时,具有明显的吸血效应。本文帮助...
  • 互联网普及带来海外应用市场崛起,社交媒体孕育全新营销机会,KOL营销赢得市场认可,未来仍有巨大空间,而聚焦海外KOL理解与掌握其趋势及规律,是实现口碑营销在社交媒体中的爆发性增长的关键。 我们知道大家在做...
  • 原文:matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR)​tecdat.cn此示例显示如何在matlab中应用偏最小二乘回归(PLSR)和主成分回归(PCR),并讨论这两种方法的有效。当存在大量预测变量,PLSR和PCR都是...
  • 新型冠状病毒的疫情还在发酵,近些天来确诊病例和疑似病例的增长,警示着我们对病毒的传播不容轻视。在所有确诊的病例当中,有不少属于聚集病例,这是由于疫情爆发正值春节假期,人群聚集现象增多,病毒“人...
  • 1. 使用reserve的必要众所周知,C++的STL容器的内存大小会随着数据数量的增加而增长。对于vector和string来说,每当须要更多的内存空间(比如push_back操作),该容器就调用与realloc类似的操作。而这个操作大概...
  • 一款App很可能会面临一夜爆红的现象,访问量和数据量在短时间内呈现爆发式增长,这时候会面临的局面是每天上亿PV、数百万新增用户和活跃用户、流量飙升至每秒数百兆。这些对于一个只部署了简单后端架构的应用来讲是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 496
精华内容 198
关键字:

如何增长性时长