监控系统概要

监控系统 三剑客 metrics monitor alert 监控什么 主机级别 CPU Memory Disk space Processes 应用程序 Error and success rates Service failures and restarts Performance and latency of responses Resource usage 网络相关 Connectivity Error rates and packet loss Latency Bandwidth utilization 服务池资源 Pooled resource usage Scaling adjustment indicators Degraded instances 外部依赖的度量 Service status and availability Success and error rates Run rate and operational costs Resource exhaustion 如何采集Metrics 黄金指标 延迟 延迟可以知道一个任务需要多久 流量 知道系统的繁忙程度 错误 错误的分类和管理 饱和 资源的利用率 可以说,任何的组件都可以通过这四个指标进行监控 组件说明 服务器组件 To measure CPU, the following measurements might be appropriate: Latency: Average or maximum delay in CPU scheduler Traffic: CPU utilization Errors: Processor specific error events, faulted CPUs Saturation: Run queue length 应用程序与服务 Latency: The time to complete requests Traffic: Number of requests per second served Errors: Application errors that occur when processing client requests or accessing resources Saturation: The percentage or amount of resources currently being used ...

2021-07-03 · 2 min · bystander

<运营之光>读书笔记

此书感觉一般。。 ◆ 第2章 运营之“光” 互联网行业内相对有一致共识的4大运营职能划分是:内容运营、用户运营、活动运营和产品运营。 ◆ 2.5 我做运营的3个底层工作方法 其实我们可以把“运营”理解为:为了要连接好产品和用户,你可能会使用的一切手段。基于这个层面来理解的话,概念层面的“运营”应当是要大于“市场”的。 ◆ 2.6.2 案例:脉脉“知识裸捐”霸屏营销背后的逻辑与思考 产品负责界定和提供长期用户价值,运营负责创造短期用户价值+协助产品完善长期价值。 ◆ 3.5 为何说“标题党”和“段子手”们都很难成为内容领域的顶尖高手 一个人若想要做好运营,我觉得可能需要:(1)一些必备的基础素质和思维方式、工作习惯等(如投入产出比意识、流程化&精细化意识、回报后置意识等)。(2)至少一项可以拿得出手、能直接带来产出的运营硬技能(如文案、内容包装&生产、活动策划、用户互动&维系、数据分析&策略制定等)。 ◆ 3.6.3 面向较小规模特定用户的针对性运营 第一,当你在一个具体项目中面临N多不确定因素的时候,其中往往存在一个最为重要的因素,它可能会成为整件事情可以顺畅发生的核心前提。且,在互联网的世界里,这个最重要的因素往往就是“一个基于某种假设的产品或服务,能否得到用户真实、自发的认可”。 ◆ 3.8 关于撬动用户互动参与意愿的8个指导原则 其实你会发现,很多时候运营在做的事,就像是攒一个“局”。即,设计或假想出来一个最终可以拉动N多人一起参与一起玩一起High的事情,并一步步去让这个事情从假想变得落地。 但,无论局大局小,组局成功的关键,总是在于你要能够一一界定清楚,局内各方的价值供给关系,并在其中穿针引线,优先引入某种较为稀缺的价值,从而逐步让各方间的价值供给关系从最初的假想一点点变为确立。 ◆ 3.8.2 懂球帝的教科书级运营案例 我自己有一个习惯,但凡我在朋友圈、微信群等地方看到有超过3个人都在提一个我此前从来没听过的概念,我就一定会专门抽出来至少30~50分钟的时间,去把这个我从来没听说过的东西彻头彻尾搞清楚。 假如你需要短时间内获得对方的注意力,那你可能需要先抛出一个可以让对方大吃一惊、瞠目结舌或十分好奇的观点和结论,瞬间击中对方,然后再去逐一论证你的观点是否可以成立。而,假如你面临着的问题是要说服对方接受一个你的观点,那么你可能更需要先从大量事实和一些细节的刻画出发,通过事实和细节引发出对方的感知、共鸣和认同,再逐步引申出你的结论。 ◆ 第4章 运营的一些宏观规律和逻辑 一个优秀的运营和一个普通人之间会存在的一个核心差别,就是优秀的运营拿到一个问题后,会先回归到流程,先把整个问题的全流程梳理出来,然后再从流程中去寻找潜在解决方案。而对普通人来说,则更可能会直接拍脑袋给出解决方案。

2021-04-07 · 1 min · bystander

《投资中不简单的事》笔记

本书不建议读,浪费时间。属于文章合集。 ◆ 第一篇 思想篇 我们做价值投资,把时间拉长,总是赚两方面的钱:一方面赚的是企业被低估的钱,这个是市场过度悲观、市场情绪化定价所带来的机会;另一方面赚的是企业成长的钱,是管理团队不断为股东创造的价值、创造的新收益 ◆ 02 在中国市场做价值投资的思路 我理解的是,价值投资根本的出发点,是看投资回报的来源是哪里。企业持续地创造价值,投资人去分享收益,这才是价值投资的方式,才是基于基本面的投资。 ◆ 03 我所理解的基本面投资 从过去十几年的业绩归因看,即使是由美国顶级聪明大脑打造的各种量化与对冲策略的基金业绩,似乎也不如人意。 ◆ 04 行业周期的判断和投资思路 我的投资框架总结成一句话就是:自上而下思考,自下而上选择。自上而下思考就是从宏观经济和产业发展的角度来圈定行业范围,自下而上选择就是从人和机制的角度来挑选标 ◆ 06 在经济变化的主航道上投资 判断一个新生意是否会成为主航道生意,有5个要点:◎ 一是新生意的体验或者效率要有数倍提升;◎ 二是这个生意要有足够的规模,小生意不可能成为主航道生意;◎ 三是这个生意必须要有足够的增长速度,在如今这个时代要符合摩尔定律;◎ 四是生意还要在商业上可行,可以在现在或可预见的未来产生卓越的资本回报率;◎ 五是第一批消费者已经在使用并且体验满意,能引领更多的人使用。 判断一个成熟的生意是否还在主航道上,有两个标准。第一个是渗透率是否足够高。通常一个生意从0到1处在主航道上,从1到10也处在主航道上,但是从10到100就未必在主航道上了。拿中国来说,渗透一线城市主流人群的过程是从0到1,渗透二线城市主流人群和一线城市非主流人群的过程是从1到10,渗透二线以下城市是从10到100的过程。第二个是增速是否显著放慢。主航道生意应当有30%以上的收入增长,如果低于这个速度,通常不再是主航道生意。好的生意都有强大的护城河,该生意的资本回报率应该同样处在较高的水平,高于20%。

2021-02-01 · 1 min · bystander

《投资中最简单的事》笔记

最近读完了邱国鹭的《投资中最简单的事》,作为一本投资理财相关的笔记书籍。比较认可的,或者不错的,都写到笔记中。 ◆ 第一部分 投资理念 好公司的两个标准 一是它做的事情别人做不了;二是它做的事情自己可以重复做。前者是门槛,决定利润率的高低和趋势;后者是成长的可复制性,决定销售增速。如果二者不可兼得,宁要有门槛的低增长(可持续),也不要没门槛的高增长(不可持续)。门槛是现有的,好把握;成长是将来的,难预测。 互联网的本质是“人生人”,优势在于能以极低成本服务无数客户,规模效应体现在“人多”,“二八”现象不明显,是典型的散户经济,得散户者得天下。银行业的本质是“钱生钱”,规模效应体现在“钱多”,80%的业务来自20%的客户,“二八”现象显著,得大户者得天下,而且那20%的大客户是需要线下的高端服务的,这就是网上银行至今在欧美日韩都没有很成功的案例的重要原因。 互联网“人生人”主要靠两条:一是网络效应(例如淘宝,买家多卖家就多,卖家多买家更多;社交网站,美女多帅哥就多,帅哥多美女更多),二靠人多提升用户体验(用户越多搜索结果越精确;用户越多,对餐厅的点评越靠谱)。可惜的是,网络银行并不会因为用户多而形成网络效应或者提升用户体验,因此优势并不明显。 投资要研究的就是这些不以人的意志为转移的规律,而不是整天去猜测市场的情绪变化。有时猜测别人的情绪变化能给我们带来收益,但那是不能够持久的。而经济规律、行业特质、商业模式是客观存在的,你只要研究透了,它在三五年内是不会有大的变化的,能为理解这些规律的投资人提供持续的竞争优势。 当其他行业的龙头公司想“移民”到某行业时,往往该行业股价已近阶段性顶部。 ◆ 02 人弃我取,逆向投资的关键 投资做了十几年,我深深体会到人弃我取、逆向投资是超额收益的重要来源。 一只下跌的股票是否值得逆向投资的关键在于以下三点。 首先,看估值是否够低、是否已经过度反映了可能的坏消息。 其次,看遭遇的问题是否是短期问题、是否是可解决的问题。 最后,看股价暴跌本身是否会导致公司的基本面进一步恶化,即是否有索罗斯所说的反身性 买股票之前问问自己,下跌后敢加仓吗?如果不敢,最好一开始就别买,因为价格的波动是不可避免的 作为消费者,我对食品安全事故深恶痛绝,但是作为投资者,我们不应该把个人感情因素带入投资决策。从历史上看,食品安全事故往往是行业投资较好的买入点,特别是那些没有直接卷入安全事故或者牵涉程度较浅的行业龙头企业,更有可能是建仓良机。 在面对其他类似食品安全事件的逆向投资机会时,投资者可以思考这样几个问题: ●有无替代品。若有替代品(例如三株口服液之类的营养品就有众多替代品),则谨慎;若无替代品,则积极。 ●是个股问题还是行业问题。如果主要是个股问题,则避开涉事个股,重点研究其竞争对手;即使是行业问题(例如毒奶粉),也可关注受影响相对较小的个股。 ●是主动添加违规成分还是“被动中枪”。 投资机会时,投资者可以思考这样几个问题: ●有无替代品。若有替代品(例如三株口服液之类的营养品就有众多替代品),则谨慎;若无替代品,则积极。 ●是个股问题还是行业问题。如果主要是个股问题,则避开涉事个股,重点研究其竞争对手;即使是行业问题(例如毒奶粉),也可关注受影响相对较小的个股。 ●是主动添加违规成分还是“被动中枪”。前者宜谨慎,后者可积极。 ●该问题是否容易解决。若容易解决,则积极;若难以解决(例如三聚氰胺问题),影响可能持续的时间长且有再次爆发的可能性,则谨慎。 ●涉事企业是否有扎实的根基。悠久的历史传承和广泛的品牌美誉度在危机时刻往往有决定性的作用,秦池、孔府的倒台就是由于根基不稳而盘子却铺得太大。 ●是否有突出的受害者个例。这决定了事件对消费者的影响是否持久。 最一致的时候就是最危险的时候 买早了还得熬得住,这是逆向投资者的必备素质。投资者必须明白一个道理,市场中没有人能够卖在最高点、买在最低点。 我有个习惯:每年年初和年中时汇总所有基金公司的季报行业配置。对大家都追捧的热门行业,我就谨慎一点;对大家都嫌弃的冷门行业,我就试着乐观一点 ◆ 03 便宜是硬道理 贪婪有两种,一种是在6000点时明知贵了,但还想等多涨一会儿再卖;另一种是在2000点时觉得便宜了,但还想等多跌一会儿再买。 投资中影响股价涨跌的因素是无穷无尽的,但是最重要的其实只有两点,一个是估值,一个是流动性。估值就是价格相对于价值是便宜了还是贵了,估值决定了股票能够上涨的空间;流动性则决定了股市涨跌的时间。 M2的合理增速应该大致比名义GDP快2~3个点。 所有的价格本质上都是货币现象,比如钱多了,水涨船高,所有东西的价格都往上涨,一旦钱少了,所有东西的价格都会往下跌。 买的时候足够便宜,就不用担心做傻瓜 过去10年没有涨,很多人就认为股票不能买,其实你反过来想,这更说明现在的股票价值比10年前要高得多。 那么什么样的行业是好行业呢?很简单,有门槛、有积累、有定价权的那种行业。 所谓门槛就是不是谁想进来就可以进来的。我们都知道中国有14亿多人口,如果某一个行业短期增长很快,利润率很高,就会有1000个人来山寨你的产品,另外1000个人想比你做得规模更大,然后把成本做得比你低 但是有的行业因为技术变化太快而很难有积累,你也许积累了很久,拼命挖了很深的护城河,人家可能不进攻这个城,绕了过去又建了新城。最明显的就是高科技行业,电子、科技、媒体和通信技术更新换代太快了。 从投资者的角度来看,有霸王条款的公司就是好公司,因为这说明他有定价权。有的公司服务姿态很低,很辛苦却赚不到钱,原因是竞争太激烈了。我们要找行业竞争不激烈、赚钱很容易的公司。这种行业和公司确实存在,但是不多,大概有5~10个行业有这样的公司。长期来看,这样的公司赚钱的概率大得多。 和巴菲特所说的找那种“傻子都能管”的公司类似,我一般都是看这个公司如果我去当CEO是不是可以管好,如果我也能管好,那就是“傻子都能管”的公司,如果傻子能管好我就买,这些因素决定了谁管都可以。许多大公司每年利润几百亿元、几千亿元,但不见得是靠管理层的本事,谁都能做管理层的公司就是好公司 我们知道价格等于市盈率乘以利润,价格变化无非是两种,一种是市盈率的变化,一种是利润的变化。所以永久性亏钱只有两个原因,一个是市盈率的压缩。 另一个是利润在历史高点的时候,夕阳行业就有本金永久性丧失的风险。 做投资真正想赚到比别人更多的收益,就要保持一个判断的独立性。别人悲观的时候也不一定就乐观,但是要想想别人的悲观有没有理由,别人的悲观是不是已经反映在股价中,现在的悲观情绪大部分已经反映在股价中了。短期看,价格波动的风险永远也没有办法避免,我们也不能够肯定说10倍的市盈率不会跌到8倍。对于个人的资金,我认为现在买房子不是什么好时机,买艺术品或者是其他的东西不如买股票。但是也不要把全部资金都放在股票上,有一定比例就可以了。投资期限越长,能够承担风险能够放的比例就越大。 ◆ |投资随想录| 牛市里,上市公司再融资是利好,因为许多人认为企业会有释放业绩的动力。熊市里,再融资是利空,因为大家都担心股票供给的增加和增发对利润的摊薄。牛市里所有消息都是好消息;熊市里所有消息都是坏消息。同一消息,在不同的市场环境下常有不同的解读——你听到的是你想听到的 伯乐在教人相马时,对他喜欢的人他就教如何相普通的好马,对他厌恶的人他就教如何相千里马。为什么呢?普通马常有,如何相马有规律,容易学。千里马不常有,是不拘一格的个例,难学,且常常无用武之地。传说中的“十倍股”成长股就像千里马一样可遇而不可求,还是脚踏实地找些价值股,也就是“普通好马”靠谱些。 不为精彩绝伦的牛股倾倒,不被纷繁复杂的个例迷惑,不抱侥幸心理,不赌小概率事件,坚持按规律投资,这是投资纪律的一种体现,也是投资成功的必要条件。 ◆ 第二部分 投资方法 回答三个问题:为什么认为一家公司便宜,为什么认为一家公司好,以及为什么要现在买。这三个问题中,第一个是估值的问题,第二个是公司品质的问题,第三个是买卖时机的问题。 我们很多的卖方报告过多地关注动态的信息,而对公司静态的信息分析得不够。静态的信息是什么呢?最简单的就是先回答一个问题:这个公司做的是不是一门好生意?好生意就是容易赚钱的生意。比如茅台,这个公司的商业模式很简单,哪怕被政府打压一样能赚钱,只是增速下来了。你说茅台的管理层一定比钢铁公司的管理层高明很多吗?那也很难说。 公司的品质好坏,关键是看能不能具有定价权。并不是说消费品就好,投资品就不好,关键还是在于有没有定价权。消费品更能有定价权是因为消费品是差异化产品,而且下游是分散的客户,公司的议价权更大;投资品的定价权更有限是因为它们经常是无差异的同质化产品,下游客户更集中,因此公司的议价权更有限。 一个行业一旦受到政府扶持,冲破各种桎梏的希望就不大,所以我一直对政府扶持的行业保持谨慎。政府对扶持的对象往往选择有误,中央政府没有精力和能力去管得这么细,各地方政府则倾向于各自扶持当地的企业,最后造成产能过剩、价格竞争。最后,资金都耗费光了,就没有钱搞研发了。没有钱搞研发,就竞争不过国外,而创新行业是以研发和创新为基础的,打价格战没有赢家。 但是,做程序员就不一定是一个好行业,可能3年就需要学一种新的计算机语言,除非你转型做产品经理。中国的很多行业就是这样,总是有后浪不断去推前浪,最后把前浪拍死在沙滩上。这样的行业就很难受。 没有一个爱投科技股?一个重要的原因就是这个行业技术变化太快,先发优势不明显,护城河每3~5年就要重新挖一次,太难把握。 一直强调胜而后求战,愿意买已经把竞争对手打趴下的公司,而不是战而后求胜,在百舸争流中猜赢家。 我不愿意在它们拍的电影很火爆的时候用50倍的市盈率去买,长期来看这具有戴维斯双杀风险。 这种颠覆性的、技术变化快的行业,是很难在事前知道谁是赢家的。并不是行业增长快就能随意购买股票 要认识一个行业,不妨做一道填空题:得___者得天下,用一个词来概括这个行业竞争的是什么。例如,基金业是得人才者得天下,高端消费品是得品牌者得天下,低端消费品是得渠道者得天下,无差异中间品是得成本者得天下,制造业是得规模者得天下,大宗品是得资源者得天下。 对于多数人而言,对待选时的正确态度应该是避免把大量的时间花在试图“抄底”或者“逃顶”上。从时间耗费的投入产出比的角度来看,对于一个公司的基本面而言,你研究了3个月,比一个研究了3天的人做出的投资结论的胜算要高得多。然而,你在一张K线图上花3个月计算各种指标,也不见得能比一个看了几秒钟K线图的人判断更准确。彼得·林奇说的“如果你每年花10分钟在宏观分析上,你就浪费了10分钟”也是同样的意思。 总有人感叹错过了一只几十倍的大牛股,卖得太早了;而不久之后又会因为回避了某只股票20%的调整而沾沾自喜。其实,二者常常是鱼与熊掌不可兼得的。短期选时与长期投资虽然有时可以并行,但是更多的时候是相冲突的。 所以才会有“88魔咒”的说法:当公募基金平均仓位达到88%以上时,一般就是市场阶段性见顶的信号了。 其实,能成功选时的总是极少数。对于多数人而言,只要把估值掌握好,把基本面分析好,淡化选时,长期来看投资回报就不会差。 两句令我很受启发的话 一句是某投资界牛人说的:投资就是要杀鸡用牛刀,因为杀鸡用鸡刀不能一刀毙命,反而容易伤到手,必须集中兵力深度调研打歼灭战。另一句是某上市公司总经理说的:带兵打仗,人是第一位的,因此即使目前经营环境恶劣,也不能减少对员工和团队的投入。 ◆ 05 宁数月亮,不数星星 第一个原则是,便宜是硬道理 第二个原则是,定价权是核心竞争力。 第三个原则是,胜而后求战,不要战而后求胜。这是《孙子兵法》里的一句话,我认为大多数可控的投资,投的是已经发生的未来。站在当下要看到未来的确定性,那它应该是胜负已分的行业。 第四个原则是,人弃我取,逆向投资。 经常问研究员一句话:“这个行业是越大越强还是越大越难?”越大越难就是不好的生意。很多行业是越大越难的 ◆ 06 经验就像旧衣服 有人喜欢集中持股,不熟不做,只打有把握的仗;有人喜欢分散持股,降低个股风险,而且易于对每只个股保持客观性(集中持股的人容易“爱上”自己的重仓股)。二者各有千秋,无所谓对错。我喜欢在中间找个平衡:足够多,能降低绝大部分的个股风险;同时又足够少,能对每个持仓都进行深入研究。 ◆ |投资随想录| 债券下跌后,人们看到的往往是机会,因为人们会注意到债券的未来到期收益率已经因为价格的下跌而上升了;股票下跌后,人们看到的却只是风险,因为股票没有固定的息票和到期日。其实,股票和债券一样,价格大幅下跌后,未来预期收益率就上升;价格大幅上涨后,未来预期收益率就下降。 ◆ 08 真假风险与安全边际 风险有两种,一种是感受到的风险,另一种是真实的风险。股票暴涨后,真实的风险上升,感受到的风险却在下降,在6000点股市最危险的时候大家感受到的都是歌舞升平;股票暴跌后,真实的风险下降,感受到的风险上升,在2000点股市相对低谷时人们感受到的却都是凄风苦雨。 保罗·琼斯(Paul Jones)是我最尊敬的对冲基金经理之一,他的座右铭是“失败者才在亏损股上越跌越买、摊低成本”。对于趋势投资者而言,止损不止赢是短线交易的第一法则,自不必多说。那么,对于价值投资者而言,应该如何对待亏损股呢?止损,死扛,还是越跌越买? 要回答这个问题,我们先回顾一下卖股票的三个理由:基本面恶化;价格达到目标价;有更好的其他投资 许多人潜意识中把买入成本当作决策依据之一,产生了常见的两种极端行为:一种是成本线上,一有风吹草动就锁定收益;成本线下,打死也不卖。另一种是成本线上无比激进,因为赚来的钱赔了不心疼;成本线下无比保守,因为本钱亏一分也肉痛。这两种极端都是人性中的“心理账户”在作祟。 忘掉你的成本,是成功投资的第一步。全市场除了你之外,没有人知道或关心你的买入成本,因此你的成本高低、是否亏损对股票的未来走势没有丝毫影响。保罗·琼斯在判断哪些股票是失败者的时候,并不是从自己的成本,而是股价的近期高点起算的——那才是人人都看得见的参照点。 忘掉成本,也就不存在亏损股和盈利股的区别,也就不会总希望在哪里跌倒就在哪里爬起来。许多人在某只股票上亏了钱,总想从这只股票上赚回来,结果是在哪里跌倒就在哪里趴着,反而错过了很多其他机会。投资就是个不断比较不同股票的过程,与成本无关。 ◆ 09 价值投资的局限性 简单地说,价值投资就是当股票价格低于公司内在价值时买入,当股票价格高于内在价值时卖出。因此,价值投资的第一个基本条件:所买的公司的内在价值应该是相对容易确定的。为什么巴菲特只买商业模式简单并且跟人们日常生活息息相关的公司?道理很简单,这些公司的未来盈利增长非常稳定,因而其内在价值很容易被确定。 价值投资的第三个基本条件:要在合适的市场阶段采用。牛市的上半段往往更适合价值投资者。牛市刚开始时,悲观情绪弥漫,许多股票价格被严重低估,此时正是价值投资者大展拳脚的好时机。到了牛市下半场,估值从合理水平向高估迈进,铁杆的价值投资者往往对股市的泡沫充满警惕而提前清仓出场,反而是趋势投资者更能顺势而为,游刃有余。 ◆ 10 四种周期、三种杠杆,行业轮动时机的把握 对有色股谈价值投资无异于对牛弹琴,唯一重要的就是趋势,包括大宗商品的趋势和有色股价的趋势。 [插图]听邱国鹭谈行业投资 #未来中国的行业趋势# 中国在可预见的未来不太可能出现下一个辉瑞、下一个沃尔玛,但出现下一个卡特彼勒、下一个三星还是有希望的。 对于大资金来说,行业配置对总体投资收益的影响常常比精选个股更为重要。一个好的荐股逻辑包括三点:估值,这只股票为什么便宜(估值水平与同业比、与历史比;市值大小与未来成长空间比);品质,这家公司为什么好(定价权、成长性、门槛、行业竞争格局等);时机,为什么要现在买(盈利超预期、高管增持、跌不动了、基本面拐点、新订单等催化剂)。同样的道理,行业配置的逻辑框架也不外乎估值、品质和时机这三个要素。 )四种周期 1.政策周期 2.市场周期(估值周期) 3.经济周期 4.盈利周期 价值投资者VS趋势投资者 价值投资者的悲剧常是买早了,下跌后没守住;趋势投资者的悲剧常是卖晚了,下跌后又舍不得斩仓。价值投资者一般是左侧投资者,既然悲剧常是买早了,那么建仓宜缓,不妨等负面消息出来股票也不跌时再买。趋势投资者是右侧投资者,既然悲剧常是卖晚了,那么斩仓就要狠,因为趋势一旦破了就难修复。 ◆ |投资随想录| 芒格对年轻人择业有三个建议:别兜售你不相信的东西,别为你不敬佩的人工作,别和你不喜欢的人共事 .政策与经济的博弈,依据历史经验看,最终胜出的一般是政策,因为政策的特点是不达目标就逐步加码,直到达成目标为止。所以说A股是政策市,不是经济市,因为看得见的手经常打败看不见的手。 在全球化和互联网时代,世界已经进入寡头阶段。如果还指望新兴中小企业能够与国际寡头竞争,就好比相信渔船舢板能挑战航空母舰。国家政策应有意识地支持中国的民营寡头成长为世界寡头,只有这样才能带动广告、法律、咨询、设计等高端生产性服务业的发展,才能跨越中等收入国家陷阱。 伟大企业是竞争而不是补贴出来的,因此在自由竞争阶段不应该对新兴行业的中小企业补贴;通过市场竞争产生民营寡头后,说明“内战”打完了,胜利者要代表中国参与“外战”了,这时国家对民营寡头在跨国并购、进出口信贷、国际渠道建设和海外知识产权纠纷等多方面的支持是必要的。 ◆ 第四部分 投资心理学 .仓位思维 一旦买成了重仓股,对利好消息就照单全收,对利空消息就不以为然,心理学上叫确认偏误,民间说法叫屁股决定脑袋。正确的决策流程是先有论据,再有结论;但多数人是先有结论,再找论据,这样一来对反面的证据自然就视而不见。有了仓位,思维就不客观,故称仓位思维。 .锚固偏见 常有人说,这股票涨这么多了,还不抛?或者,已经跌一半了,还不买?这就是锚固偏见的表现,其潜意识是把原有股价当成合理、有参照性的锚点。其实,一个股票便宜与否,看估值比看近期涨跌更可靠:基本面大幅超预期时会越涨越便宜,反之会越跌越贵。锚固偏见是奢侈品的常用营销手段。先设计一批2万美元的包包让模特们背着走来走去,让你感觉这个品牌的包就值2万美元一个。这样一来,当你在店里看到1000美元的同一品牌包时,就不觉得贵了。其实2万美元的包也卖不了几个,利润主要来自卖1000美元的包。 其实,股票的投资价值与买入成本无关;该不该卖,也与你是否亏损无关。1万元亏损带来的痛苦是1万元盈利带来的喜悦的2倍 细细地回想一下,那些垃圾股、庄股以及你只想做个波段赚点快钱就跑的股票,是不是也经常让你有“差点就赢”的经历? 不管是集体看空还是集体看多,最一致的时候往往是最危险的时候。只有卓尔不群的人才能在高处有如临深渊的谨慎,在低谷有仰望星空的勇气。 12.心理账户 广播电视节目中常有股民这样提问:“我买了某某股票,成本是xxx,请问应如何操作。”提问者潜意识中已把买入成本当作买卖决策的依据之一。其实,是否应该卖出取决于很多因素(估值、品质、时机),但与买入成本无关,因为你的买入成本根本不影响股价的未来走势。 广播电视节目中常有股民这样提问:“我买了某某股票,成本是xxx,请问应如何操作。”提问者潜意识中已把买入成本当作买卖决策的依据之一。其实,是否应该卖出取决于很多因素(估值、品质、时机),但与买入成本无关,因为你的买入成本根本不影响股价的未来走势。心理账户指的是人们喜欢在脑袋中把钱分成不同部分(例如买房的钱和买菜的钱)。投资者最常见的心理账户是把钱分为本钱和赚来的钱,并且对这两部分的钱体现出非常不同的风险偏好,这样无形中就把买入成本作为决策依据之一了。 ◆ 12 后视镜 ...

2021-01-31 · 1 min · bystander

《时间的玫瑰》投资阅读笔记

最近读完了但斌的《时间的玫瑰》,作为一本投资理财相关的笔记书籍。先摘录一些笔记,然后是个人的一些感悟。 笔记摘要 ◆ 序一 价值投资的完美践行者 价值投资有且只有4个核心理念,这4个核心理念堪称简单、完美: 1.股票是对公司的部分所有权。 2.市场只会告诉你价格是什么,而不会告诉你价值是什么。 3.投资本质上是对未来进行预测,预测结果不可能100%正确,因此要有安全边际,安全边际主要源自买得便宜和低预期。 4.通过长时间的努力可以形成自己的能力圈,能力圈的边界比大小重要。 ◆ 中国私人财富管理 土地是经济发展的函数,经济发展了,其成果最终一定要反映到地价上,整个经济发展一定会在固定资产中得到不断体现。 再说房地产调控,目前的调控我的理解是国家实际上在帮助央企、龙头型企业消除其竞争对手。另外,行业龙头企业的诞生,一定是在行业处于困境的情况下,如果都赚钱了,谁也不会破产不会转卖。 ◆ 穿越时间的河流与伟大企业共成长 在我们的价值体系和哲学思考中,我们认为,只有从企业本身出发,才能真正赚到钱,这也是我们东方港湾成立以来一直在学习和坚持的东西。 ◆ 投资札记之一:偶然的投资人生 发现优秀企业,趁低购买,长期持有(BUY AND HOLD IT)”的策略是目前为止被证明是最有效的投资方法!“成长型价值投资法”是我们罗盘上指向北极的唯一指针。 简而言之,我们希望选择的企业符合几项标准: 有长期稳定的经营历史; 有高度的竞争壁垒,甚至是垄断型企业,最好是非政府管制型垄断; 管理者理性、诚信,以股东利益为重; 财务稳健,负债不高而净资产收益率高,自由现金流充裕; 我们能够理解的,能够把握的企业。 作为投资人,应该更多地研究企业经营,简单称为“产、供、销”几方面,只有经营得好的企业,才有投资价值。 我们 那么何时卖出呢?理论上讲,好企业最好长期持有,但以下三种情况我们也会选择卖出: 好企业被市场高估太多了。 好企业开始衰退期。 当我们发现更好的企业,更换旧的投资。 ◆ 投资札记之二:选股没有秘密 招商银行的未来 没有事物是永恒的,招商银行也一样无法确定自己的未来。但有一点是肯定的,只要有人类存在,银行业就会一直发展下去。某种意义上,“银行业的未来就是人类社会的未来”(见亨利·英格勒、詹姆斯·埃森格《银行业的未来》)。 越有能力的人越渴望自由,而平均水准以下的人群渴望的则是公平。 ◆ 投资札记之三:投资最难的是什么 如果我们不愿意拥有一家股票十年,那就不要考虑拥有它十分钟。”这是巴菲特选择企业的原则。 ◆ 投资札记之四:给新股民的建议 许多投资者在计算他们的财富时,记忆永远停留在他们曾经达到的最辉煌的那一刻,常将某一天的最高市值视为已到手的收益,然后以那一刻的市值来计算他的得失。结果,变化的市值与最高市值相比,难免心态失衡。投资应该超越这种“财富观”。过去的市值包括买入价格等都属于“沉没成本”。有的人天天看自己账户上市值的变化,其实这没有任何意义,更容易唤起一种心里错觉,患得患失 ◆ 投资札记之五:股市知与行 西方有一句古老的谚语:要为长期而买进!时间是最有价值的资产,我们今天所买入的股票不仅仅属于我们自己,还是整个家族的。我们应该为我们的子孙担负起此刻的职责。 ,全世界只有少数国家或地区允许赌博业合法,因为它是一个你赢我输的零和游戏。但资本市场为什么在这么多国家获得支持和发展,其实它的本质是非零和游戏,是参与者能共赢的游戏。 ◆ 坚持是价值投资的核心 《证券市场周刊》:你认为价值投资理论复杂吗?但斌:很简单。巴菲特提到价值投资观念的核心是“以40美分的价格买进一美元的纸钞”,而成长是优秀公司价值的一个必要组成,即是说,这个一美元的纸钞随着时间仍在继续增值。这个方法本身不是很难,很容易讲明白,但是坚持不容易。这里面我认为存在三个无法避过的阶段:一是理解和接受价值投资的观念;二是要本着严谨的态度,以逻辑合理的方法去评估企业的价值;三是在动荡的环境中坚持。规则很简单,但是坚持太难了。 我们对组合理论的理解,大概7个股票是最好的结果,超出了可能很难达到最大的收益,降低了可能风险就稍微大一点。好股就那么多。一个经济体中,企业的构成像金字塔,最好的企业就是塔尖那么几个,越往下越差。你的资金越集中在金字塔的顶部,收益越高。 证券市场周刊》:那你讲一下他的财富观。但斌:就是说你对财富是怎么看待的。比如说一般的老百姓说我有钱了,要买好车,要买好房子,娶个好老婆。但是财富就是改变世界、影响世界的工具,就是这个财富应该被谁驾驭,这是一个社会问题。假设有上帝,上帝会进行选择,他会选择把这些财富交给什么样的人来管理,这是很重要的。为什么中国的富豪老出事呢?就是这个人如果不义,上帝也不会把更多的财富给他。 资本市场的本质是什么?就把社会财富放到最有效率的一个企业里,让最能干的人、最好的团队、有最好文化的企业来运用。把财富交到这些人手里,然后让他们去创造财富。巴菲特做的事情就是把钱放到这些好企业里。 ◆ 价值投资的内在逻辑 但斌:熊市的时候有很多股票可以挑,打个比喻,就像打高尔夫球一样,很多球都落在地上,可以不断地打,打飞一个以后还有。熊市里,如果错过茅台还有招商银行,错过招商银行还有万科。现在是打一个少一个,快打光了。很多人“5·30”空仓了,他想球还会落在地上,还会让他有一个合适的位置打,但是恰恰相反,他想买的东西不断往上涨,他不想买的东西不断往下跌,他没有球可打。更可怕的是,如果他认为这些股票高估的假设是成立的,也许还能够等到这个球,如果事情的发展超出他的想象,真的连续3年100%增长,这个球就永远打不到了。如果思维方式不变,或者是对于这个增长老是持怀疑态度,他永远打不着这个球。所以投资难在哪?长期投资坚持的是什么?是对于一个国家、一个企业,它长期发展的逻辑有没有一个合理判断,有了这样一个合理的判断,你才有机会打出好球,否则的话会很遗憾。 ◆ 价值投资的本质是什么? 但斌:高盈利行业的共同特征是商业模式简单、可靠,容易理解,有强大的商业壁垒,有持续创造财富的能力。 我们自己算过,未来七年,茅台每年会有21%~24%的复合增长。腾讯我们现在看不到天花板,但是我们觉得它会大得像一个国家一样,不排除到10万亿元的可能性。 有些人后悔不过是因为他们不停在变。 ◆ 纽约上空自由飞翔的鸽子 女神像底座上的诗歌“欢迎你,那些疲乏了的和贫困的挤在一起渴望自由呼吸的大众,那熙熙攘攘的被遗弃了的可怜的人们。把这些无家可归的饱受颠沛的人们一起交给我。我站在金门口,高举起自由的灯火!”为理想的国家而言,显然是历史的倒退……美国的价值观已经在“撕裂”…… ◆ 绽放我们的生命 此刻,这位老朋友也让我联想起英国圣公会主教墓碑上的一段话:当我年轻自由的时候,我的想象力没有任何局限,我梦想改变这个世界。当我渐渐成熟明智的时候,我发现这个世界是不可能改变的,于是我将眼光放得短浅了一些,那就只改变我的国家吧!但是我的国家似乎也是我无法改变的。当我到了迟暮之年,抱着最后一丝努力的希望,我决定只改变我的家庭、我亲近的人——但是,唉!他们根本不接受改变。现在在我临终之际,我才突然意识到:如果起初我只改变自己,接着我就可以依次改变我的家人,然后,在他们的激发和鼓励下,我也许就能改变我的国家。再接下来,谁又知道呢,也许我连整个世界都可以改变。 个人感悟 几年前在美股市场买了一点美股,当时看好英伟达,觉得英伟达是一家伟大的企业,本金很少,但是收益率很高。前段时间,买过蔚来,在2块买入,3块卖掉了。读完时间的玫瑰之后,作为自诩价值投资的人,感到深深的羞愧。自己还是有不少投机的思维,看好一家公司,长期持有他。投资可能也就是如此简单吧。

2020-10-10 · 1 min · bystander

Mysql中的B+树介绍

最近工作中遇到了一些索引的问题,发现自己其实并不了解,因此稍微了解下。在介绍B+树之前,需要先了解下B树,部分信息来源自参考文档。 什么是 B 树 B树概念 B树也称B-树,它是一棵多路平衡查找树(和二路对应)。二叉树我想大家都不陌生,其实,B树和后面讲到的B+树也是从最简单的二叉树变换而来,下面我们来看看B树的定义。我们定义m表示树的阶。阶数表示了一个节点最多有多少个子节点,那么一棵B需要满足以下几个条件 1.每个节点最多有m-1个关键key(可以存有的键值)。 2.根节点最少可以只有1个关键字。意思是也可以有多个。 3.非根节点至少有m/2个关键字。如果少了,那么就要进行树的调整 4.为了平衡查找,每个节点中的关键字都按照从小到大的顺序排列,每个关键字的左子树中的所有关键字都小于它,而右子树中的所有关键字都大于它。这个很简单了。没有这个保证的话,平衡查找无从谈起。 5.所有叶子节点都位于同一层,或者说根节点到每个叶子节点的长度都相同。 6.包括非叶节点在内,每个节点都存有key和数据,也就是对应的key和value。 也就是说,根节点的关键字数量k的范围:1 <= k <= m-1,非根节点的关键字数量范围:m/2 <= k <= m-1。 什么是B+树 B+树其实和B树是很相似的,特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。B+ 树元素自底向上插入,这与二叉树恰好相反。 相同点 1.根节点至少一个元素 2.非根节点元素范围:m/2 <= k <= m-1 不同点 1.B+树有两种类型的节点:内部结点(也称索引结点)和叶子结点。内部节点就是非叶子节点,内部节点不存储数据,只存储索引,数据都存储在叶子节点。而B树都存储数据,这会导致查询性能不稳定,因为查找次数不确定。 2.内部结点中的key都按照从小到大的顺序排列,对于内部结点中的一个key,左树中的所有key都小于它,右子树中的key都大于等于它。叶子结点中的记录也按照key的大小排列。 3.每个叶子结点都存有相邻叶子结点的指针,叶子结点本身依关键字的大小自小而大顺序链接。 4.父节点存有右孩子的第一个元素的索引。 mysql中的选择 索引的数据结构 数据库中,数据都存在磁盘中,索引也多到大部分存在磁盘中,这样对于索引,每次查找数据时把磁盘IO次数控制在一个很小的数量级,最好是常数数量级。就这样,b+树应运而生。 MySQL 默认的存储引擎选择 B+ 树而不是哈希或者 B 树的原因: 1.哈希虽然能够提供 O(1) 的单数据行操作性能,但是对于范围查询和排序却无法很好地支持,最终导致全表扫描; 2.B 树能够在非叶节点中存储数据,但是这也导致在查询连续数据时可能会带来更多的随机 I/O,而 B+ 树的所有叶节点可以通过指针相互连接,能够减少顺序遍历时产生的额外随机 I/O; 如上图,是一颗b+树,关于b+树的定义可以参见B+树,这里只说一些重点,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示),如磁盘块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块。真实的数据存在于叶子节点即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非叶子节点只不存储真实的数据,只存储指引搜索方向的数据项,如17、35并不真实存在于数据表中。 b+树的查找过程 如图所示,如果要查找数据项29,那么首先会把磁盘块1由磁盘加载到内存,此时发生一次IO,在内存中用二分查找确定29在17和35之间,锁定磁盘块1的P2指针,内存时间因为非常短(相比磁盘的IO)可以忽略不计,通过磁盘块1的P2指针的磁盘地址把磁盘块3由磁盘加载到内存,发生第二次IO,29在26和30之间,锁定磁盘块3的P2指针,通过指针加载磁盘块8到内存,发生第三次IO,同时内存中做二分查找找到29,结束查询,总计三次IO。真实的情况是,3层的b+树可以表示上百万的数据,如果上百万的数据查找只需要三次IO,性能提高将是巨大的,如果没有索引,每个数据项都要发生一次IO,那么总共需要百万次的IO,显然成本非常非常高。 b+树和索引的关系 联合索引,如果有一个3列索引(name,age,sex),则已经对(name)、(name,age)、(name,age,sex)上建立了索引; 1.我们知道IO次数取决于b+数的高度h,假设当前数据表的数据为N,每个磁盘块的数据项的数量是m,则有h=㏒(m+1)N,当数据量N一定的情况下,m越大,h越小;而m = 磁盘块的大小 / 数据项的大小,磁盘块的大小也就是一个数据页的大小,是固定的,如果数据项占的空间越小,数据项的数量越多,树的高度越低。这就是为什么每个数据项,即索引字段要尽量的小,比如int占4字节,要比bigint8字节少一半。这也是为什么b+树要求把真实的数据放到叶子节点而不是内层节点,一旦放到内层节点,磁盘块的数据项会大幅度下降,导致树增高。当数据项等于1时将会退化成线性表。 2.当b+树的数据项是复合的数据结构,比如(name,age,sex)的时候,b+数是按照从左到右的顺序来建立搜索树的,比如当(张三,20,F)这样的数据来检索的时候,b+树会优先比较name来确定下一步的所搜方向,如果name相同再依次比较age和sex,最后得到检索的数据;但当(20,F)这样的没有name的数据来的时候,b+树就不知道下一步该查哪个节点,因为建立搜索树的时候name就是第一个比较因子,必须要先根据name来搜索才能知道下一步去哪里查询。比如当(张三,F)这样的数据来检索时,b+树可以用name来指定搜索方向,但下一个字段age的缺失,所以只能把名字等于张三的数据都找到,然后再匹配性别是F的数据了, 这个是非常重要的性质,即索引的最左匹配特性。 参考 https://zh.wikipedia.org/wiki/B%2B%E6%A0%91 https://segmentfault.com/a/1190000020416577 https://tech.meituan.com/2014/06/30/mysql-index.html https://draveness.me/whys-the-design-mysql-b-plus-tree

2020-01-10 · 1 min · bystander

理解 CAP 理论

背景 CAP理论 实际上听起来非常简单,但是有时候,遇到一些具体的问题的时候, 还是不能很清晰的分辨出来,到底是CP还是AP,以及一些其他的问题。因此,专门作为"生产者"来学习下,加深理解。 首先,在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点: 1.一致性(Consistency) (等同于所有节点访问同一份最新的数据副本) 2.可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据) 3.分区容错性(Partition tolerance)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。) 根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。 这个定理起源于加州大学柏克莱分校(University of California, Berkeley)的计算机科学家埃里克·布鲁尔在2000年的分布式计算原理研讨会(PODC)上提出的一个猜想。 在2002年,麻省理工学院(MIT)的赛斯·吉尔伯特和南希·林奇发表了布鲁尔猜想的证明,使之成为一个定理。 举例 假设你明天就要放长假了,你想买一本战争与和平的书籍,你最喜欢的在线商城里面只有一本了。 一致性: Consistency,在Gilbert and Lynch 的论文里,他们也用 “Atomic” 原子性来代替一致性这个单词。 在买书的这个例子里,你要么就是把书放到了购物车,要么就是放失败了,要么付款,要么没付款,不可能说放了一半,或者说买了一半。只有一本书,如果两个客户都准备买,缺乏一致性的话,如果两个人都完成了下单,可能会出问题。比如两个人都下了单,当然,在这个例子中,并不严重。 我们也可以用数据库来解决这个问题,数据库里有个字段减去个1,然后当及其他客户也要付款的时候,我们提示他没了。 数据库看很好用。因为具有ACID的能力。既有一致性,又有原子性,中间状态对第二个客户端是不可见的。是隔离的。因为第二个客户端再下单的时候,另一个用户在事务中的话,就锁住了数据库那条记录。 可用性: 可用性就是说,当你需要的时候,大部分情况下,服务都是可以为你服务的。以买书为例,在用户A开启事务的时候,有那么几毫秒是锁表的,这个阶段,服务可以认为对其他用户是不可用的。并不是说要时时刻刻可用,一般会有个可用率的指标。如果记不住,可以通过这里来计算: https://uptime.is/99.99999 分区容错: 如果你就一个数据库,一个服务端,那一般也都是原子的,如果挂了,服务不可用,但是数据还是一致的。 一旦你把数据和代码逻辑,开始部署在不同的节点上,这时候就存在分区。如Node A 不能和Node B通信来,这种分区问题经常出现。 用图来证明: 在一个网络环境下,有两个节点,N1和N2,共享相同的数据V,在买书这个例子中,这个数据里面存储的就是有多少本书,假设初始值是V0,在N1上运行一个买卖算法,A,假设这个算法没有bug,非常正确,可心来,N2也是类似的,叫做B,A写了一个新值到V中,然后B从V中读取。 正常流程是这样,A写完之后,N1和N2通过一个消息(非具体的消息),将这个值同步给N2。然后B也就能读到了。 1.A写了一个值V1 2.从N1发了个消息M到N2。 3.B也能从V中读到V1了 但是,现实没有这么美好 网络发生了分区,从N1到N2的消息没有投递成功。这样,到第三步的时候,N2读到了V0这个错误的值。 如果M是一个异步消息,那么N1都没办法知道N2是不是收到了。即使有办法保证M这个消息一定发出去了。那么N1也没办法知道,这个消息是不是被投递了,也不知道N2处理的时候,有没有问题。那么,如果我们把M改成同步消息呢。也不行,因为这意味着将A写值到N1,和从N1到N2更新事件是一个原子操作。 CAP告诉我们,如果我们想要A和B高度可用(低延迟),我们就要N1和N2保持分区容错,比如出现消息丢失,消息未投递,硬件故障,或者处理失败。这种情况下,就会出现有时候一些节点任务V是V0,另一些节点认为是V1. 如果有一个事务,叫做a1,a1可能是一个写操作,a2是一个读操作,在本地系统中,通过数据库或者自己加锁,加隔离是很简单的。可以强制a1写完之后,a2才发生,但是在分布式环境中,一旦加了这些东西,就影响额分区容错和可用性。 处理CAP CA 不要 P,不要分区容错 不保证分区容错,那么你可以部署在一个台机器上,但是容量受限。并且还是会存在网络问题。分布式环境下,网络分区是必然的。除非你就不想做分布式。 在分布式的环境下,网络无法做到100%可靠,有可能出现故障,因此分区是一个必须的选项,如果选择了CA而放弃了P,若发生分区现象,为了保证C,系统需要禁止写入,此时就与A发生冲突,如果是为了保证A,则会出现正常的分区可以写入数据,有故障的分区不能写入数据,则与C就冲突了。因此分布式系统理论上不可能选择CA架构,而必须选择CP或AP架构。 从Google的经验中可以得到的结论是,无法通过降低CA来提升P。要想提升系统的分区容错性,需要通过提升基础设施的稳定性来保障。 所以,对于一个分布式系统来说。P是一个基本要求,CAP三者中,只能在CA两者之间做权衡,并且要想尽办法提升P。 CP 不要 A 不要可用性 当你想要分区容错的时候,并且可以容忍长时间的停机或者无影响。就可以舍弃可用性。 一个保证了CP而一个舍弃了A的分布式系统,一旦发生网络故障或者消息丢失等情况,就要牺牲用户的体验,等待所有数据全部一致了之后再让用户访问系统。 设计成CP的系统其实也不少,其中最典型的就是很多分布式数据库,他们都是设计成CP的。在发生极端情况时,优先保证数据的强一致性,代价就是舍弃系统的可用性。如Redis、HBase等, 常用的Zookeeper也是在CAP三者之中选择优先保证CP的。ZooKeeper是个CP 的,即任何时刻对ZooKeeper的访问请求能得到一致的数据结果,同时系统对网络分区具备容错性。但是它不能保证每次服务请求的可用性,也就是在极端环境下,ZooKeeper可能会丢弃一些请求,消费者程序需要重新请求才能获得结果。 ZooKeeper 是分布式协调服务,它的职责是保证数据在其管辖下的所有服务之间保持同步、一致。所以就不难理解为什么 ZooKeeper 被设计成CP而不是AP特性的了。从实际情况来分析,在使用 Zookeeper 获取服务列表时,如果 ZooKeeper 正在选举或者 ZooKeeper 集群中半数以上的机器不可用,那么将无法获取数据。所以说,ZooKeeper 不能保证服务可用性。 Eureka 则是一个AP系统,一部分节点挂掉不会影响到正常节点的工作,不会出现类似 ZK 的选举 Leader 的过程,客户端发现向某个节点注册或连接失败,会自动切换到其他的节点。 只要有一台 Eureka 存在,就可以保证整个服务处在可用状态,只不过有可能这个服务上的信息并不是最新的信息。 SofaRegistry 也是一个AP系统。 AP 不要 C 不要一致性 要高可用并允许分区,则需放弃一致性。一旦网络问题发生,节点之间可能会失去联系。为了保证高可用,需要在用户访问时可以马上得到返回,则每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。 这种舍弃强一致性而保证系统的分区容错性和可用性的场景和案例非常多。前面我们介绍可用性的时候说到过,很多系统在可用性方面会做很多事情来保证系统的全年可用性可以达到N个9,所以,对于很多业务系统来说,比如淘宝的购物,12306的买票。都是在可用性和一致性之间舍弃了一致性而选择可用性。 举个例子,你在12306买票的时候肯定遇到过这种场景,你购买的时候提示你是有票的(但是可能实际已经没票了),你也正常下单了。但是过了一会系统提示你下单失败,余票不足。这其实就是先在可用性方面保证系统可以正常的服务,然后在数据的一致性方面做了些牺牲,会影响一些用户体验,但是也不至于造成用户流程的严重阻塞。 但是,我们说很多网站牺牲了一致性,选择了可用性,这其实也不准确的。就比如上面的买票的例子,其实舍弃的只是强一致性。退而求其次保证了最终一致性。也就是说,虽然下单的瞬间,关于车票的库存可能存在数据不一致的情况,但是过了一段时间,还是要保证最终一致性的。也就是说,最终不会出现,2个人买到了同样的票。 对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。 怎么选择呢 既要又要。那怎么办? 虽然三个不能保证,但我们能不能在一致性上作出一些妥协,不追求时时刻刻的强一致性,转而追求最终一致性,所以引入 BASE 理论。 在分布式事务中,BASE 最重要是为 CAP 提出了最终一致性的解决方案,BASE 强调牺牲高一致性,从而获取可用性,数据允许在一段时间内不一致,只要保证最终一致性就可以了,实现最终一致性。 弱一致性:系统不能保证后续访问返回更新的值。需要在一些条件满足之后,更新的值才能返回。从更新操作开始,到系统保证任何观察者总是看到更新的值的这期间被称为不一致窗口。 最终一致性:这是弱一致性的特殊形式;存储系统保证如果没有对某个对象的新更新操作,最终所有的访问将返回这个对象的最后更新的值。 BASE 模型 BASE 模型是传统 ACID 模型的反面,不同于 ACID,BASE 强调牺牲高一致性,从而获得可用性,数据允许在一段时间内的不一致,只要保证最终一致就可以了。 BASE 模型反 ACID 模型,完全不同 ACID 模型,牺牲高一致性,获得可用性或可靠性:Basically Available 基本可用。 支持分区失败(e.g. sharding碎片划分数据库)Soft state 软状态,状态可以有一段时间不同步,异步。 Eventually consistent 最终一致,最终数据是一致的就可以了,而不是时时一致。 参考 http://www.julianbrowne.com/article/brewers-cap-theorem https://www.cnblogs.com/13yan/p/9243669.html

2020-01-06 · 1 min · bystander

深入理解Raft协议

本文部分以JRaft为例,来详细介绍Raft。 Raft 来源 首先,我们介绍 Raft 问题的来源,Raft 实际上是一个一致性算法的一种实现,和Paxos等价,但是在实现上,简化了一些,并且更加易用。 这里面又引入了两个名字。一个是一致性,一个是Paxos,我们先说一致性, 一致性是一个可容错的分布式系统重的最基本的一个问题,一致性包含了“多个服务器对同一个值达成共识,一旦对某个值达成共识,这个决定就是不可变了”,通常,一致性算法,当多数服务器可用的时候,才有效,比如5个server,那么2个挂了,是没问题的,但是再挂一个,超过一半,就不能提供服务了。这句话也说明,他不会返回错误的值,因为都不提供服务了。 一致性通常和 Replicated State Machines(后面简称RSM)相关,最早提出是在图灵奖得主Leslie Lamport的著名论文"Time, clocks, and the ordering of events in a distributed system(1978)“论文中,比较系统性的阐述是在Fred Schneider的论文” Implementing fault-tolerant services using the state machine approach(1990)“中。 它的基本思想是一个分布式的RSM系统由很多个replica组成,每个replica是一个状态机,它的状态保存在一组状态变量中。状态机的状态通过并且只能通过外部命令(commands)来改变。比如你可以把MySQL服务器想像成一个状态机。它每接收到一条带修改功能的SQL语句(比如update/insert)就会改变它的状态。一组配置好replication的MySQL servers就是典型的RSM。 RSM能够工作基于这样的假设: 如果一些状态机具有相同的初始状态,并且他们接收到的命令也相同,处理这些命令的顺序也相同,那么它们处理完这些命令后的状态也应该相同。 因为replica都具有相同的状态,所以坏掉任何一个也没有关系。有了RSM之后理论上可以做到永远不会因为机器的物理故障而丢失数据。 也就是说,根据论文的指导,比较普遍的构建容错系统的方法是,每个服务器都维持一个状态机和一个Log,状态机就是我们想要实现容错的一个组件实现,比如想实现一个分布式环境下可容错的 Hash Table, 客户端会和这个状态机交互,每个状态机从log中获取input命令,在这个Hash Table 的例子中,这个log 可能是类似 把X 设置成3这样的命令,一致性算法必须确保,如果任何一个状态机在第N个命令中认可了n被设置为了3,那么其他机器上的状态机器就绝对不应该设置为其他值,这就能保证其他所有的机器总是处理相同的命令序列,最终大家都是同样的状态。 至于Paxos,这里可以先简单理解就是个一致性算法的实现方式,和 Raft 类似。 总结就一致性是为了解决分布式环境下的容错问题,而Raft 和 Paxos 是其中的一种实现。 核心怎么实现呢 要实现Raft,根据作者的表述,通过对状态空间的简化,以及问题的分解,实现方只需要实现的就是各个子问题 状态空间: 状态太多就会增加理解的困难程度。Raft 算法尽可能地确定各个环节的状态。典型地,Raft 算法采用 strong leader 的模型,每个日志的读写均由 Leader 从中主动协调,这样一来,整体系统的数据流将非常简单:从 Leader 流行 Follower。而且每个节点的状态也只有 3 种:Leader,Candidate 和 Follower。 子问题: Leader election:描述如何从集群的几个节点中选举出 Leader; Log Replication:描述如何将日志同步到各个节点从而达成一致; Safety:定义了一组约束条件来保证 Raft 算法的强一致性; Membership changes:描述如何变更集群关系(增加或者减少节点); Leader election Raft的节点被称为peer,节点的状态是Raft算法的关键属性,在任何时候,Raft节点可能处于以下三种状态: Leader:Leader负责处理客户端的请求,同时还需要协调日志的复制。在任意时刻,最多允许存在1个Leader,其他节点都是Follower。注意,集群在选举期间可能短暂处于存在0个Leader的场景。 Follower:Follower是被动的,它们不主动提出请求,只是响应Leader和Candidate的请求。注意,节点之间的通信是通过RPC进行的。 Candidate:Candidate是节点从Follower转变为Leader的过渡状态。因为Follower是一个完全被动的状态,所以当需要重新选举时,Follower需要将自己提升为Candidate,然后发起选举。 但是这种机制也带来一个麻烦,如果一个节点 因为自己的原因没有看到 Leader 发出的通知,他就会自以为是的试图竞选成为新的Leader,虽然不断发起选举且一直未能当选(因为Leader和其他船都正常通信),但是它却通过自己的投票请求实际抬升了全局的 Term 为了阻止这种“捣乱”,可以设计一个预投票 (pre-vote) 环节。候选者在发起投票之前,先发起预投票,如果没有得到半数以上节点的反馈,则候选者就会放弃参选,也就不会提升全局的 Term。 Candidate 被 ET(Election Timeout) 触发 Candidate 开始尝试发起 pre-vote 预投票 Follower 判断是否认可该 pre-vote request Candidate 根据 pre-vote response 来决定是否发起 RequestVoteRequest Follower 判断是否认可该 RequestVoteRequest Candidate 根据 Response 来判断自己是否当选 线性一致性 线性一致读是在分布式系统中实现 Java volatile 语义,当客户端向集群发起写操作的请求并且获得成功响应之后,该写操作的结果要对所有后来的读请求可见。其实就是CAP里面的C, Raft log read 实际上如果基于Raft本身的设计,因为每次 Read 都需要走 Raft 流程,Raft Log 存储、复制带来刷盘开销、存储开销、网络开销,走 Raft Log不仅仅有日志落盘的开销,还有日志复制的网络开销,另外还有一堆的 Raft “读日志” 造成的磁盘占用开销,导致 Read 操作性能是非常低效的,所以在读操作很多的场景下对性能影响很大,在读比重很大的系统中是无法被接受的,通常都不会使用。 ...

2019-12-30 · 3 min · bystander

skywalking插件开发的注意事项

最近蚂蚁金服中间件开源了 sofa 相关的部分组件,比如 rpc,欢迎大家参与讨论贡献,为 rpc 做链路适配的时候,skywalking 现在快到5.0版本了. 已经不支持 h2暂时,开发过程中了,环境的搭建.以下部分字段不能少.否则外面无法连接 es. docker run -d -p 9200:9200 -p 9300:9300 -e "network.host=0.0.0.0" -e "transport.host=0.0.0.0" -e "network.publish_host=0.0.0.0" -e "xpack.security.enabled=false" -e "network.bind_host=0.0.0.0" -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:5.5.0 这条命令会搞定. 同时 application.yml 文件中 storage: elasticsearch: cluster_name: docker-cluster cluster_transport_sniffer: false cluster_nodes: localhost:9300 index_shards_number: 2 index_replicas_number: 0 ttl: 70 这一段改一下. 其他的一些网上已有的文档,可以看看.SkyWalking 源码分析 —— 调试环境搭建

2018-05-13 · 1 min · bystander

分析代码调用关系的利器-Flow

今天推荐一个不错的软件.是idea 的插件.名字是Flow, 官方称:A better way to understand your Java applications,原理就是通过 java-agent 修改字节码,配置了拦截器,然后真实地跑一个测试用例,或者启动一下项目,就会生成一个真实的调用关系.官方地址:http://findtheflow.io/ 之前阅读源代码,对于抽象类,或者接口,静态阅读代码不太容易确定具体的调用类,因此阅读有一定的阻碍,当然 debug 也行..但是这个可以通过跑用例,或者简单的测试用例,理清调用关系,非常不错. 可以对代码结构有一个整体关系 安装 安装比较简单:https://plugins.jetbrains.com/plugin/8362?pr=idea 直接安装idea 这个插件,然后重新启动 idea, 安装完成后的效果. 使用 使用更简单,直接点击上图中的按钮,开始跑一下,即可,如果启动成功.控制台会有显示. 然后,会在本地开启7575的端口,来显示结果. 效果 注意,在结果页里,可以和 idea 源码交互,对着方法点右键,可以直接定位到 idea 代码中的源代码,非常方便. 其他 其他,就是 可以在配置里设置根据哪些类,这样一些工具类啥的可以直接忽略了. 使用了一下,还是不错的.但是这个有个问题,如果你的项目自定义了 classloader/ 或者使用了自定义的容易,这个由于没有 mvn 的 jar 包,可能会报错,类找不到.暂时没有好的办法.但是阅读开源代码基本没有问题了.

2017-04-08 · 1 min · bystander