Free To Feel

Heading to entrepreneur.


Joshua Chi
Github

    灵活使用第三方CDN,解决网站高并发之忧

    CDN在互联网中的使用,由来已久。 基于地域特征的缓存策略,解决了网站跨地域访问的速度限制。 下面想说说近来基于Aliyun CDN 的几个架构方案,从不同的业务角度与网站要求来说说玩转CDN的各种手法。

    纯静态网站

    纯静态网站是几乎可以把网站的“可用性”,“稳定性”,“可靠性”,等等所有一切和第三方CDN产品绑定在一起的。 大部分第三方CDN都支持绑定网站入口("index.html"). 用阿里云的CDN加上阿里云OSS这套解决方案,你几乎就是可以把你网站运营完全扔给阿里云来处理了。 当然如果回源机是你自己公司host,那么峰值带宽你就需要仔细测试考量。一般不推荐自己host源文件,也几乎没人那么去做(如果不是公司业务/政策限制)。

    纯静态网站第三方CDN托管是对任何公司都是性价比超高的方案。第三方公司如果有辅助功能或者辅助业务,比如流量监测之类的,那用起来更是得心应手。

    动态请求的网站

    全站CDN

    全站CDN的意思是把网站域名CNAME到CDN域名,所有请求都是经过CDN服务。 对于网站运营人员来说就要很好的做网站动静分离,还有类似cookie透传开通。 一般域名运营商不允许根域名做CNAME,所以如果要做类似 example.com 到 www.example.com 的跳转,还要先经过自己的web服务器做个vhost,个人感觉挺鸡肋的,架构思路不够清洁。

    全站CDN有点把不是CDN的职责硬要CDN揽上,这么做的结果就是上述说提,你还是需要动静分离。

    动静分离的CDN

    Vhost中做分离

    如果自己web服务器上做动静分离,就比较简单,你只需要在vhost配置文件中,把静态资源的请求一股脑的丢给CDN。 这么做有个比较大的问题,对于很多大厂的CDN,某地狱的CDN节点也是一个集群,有自己的health check,当它们下线某个故障CDN节点,你server node 的DNS有可能缓存了这个故障节点的IP。当然运营商那边也有一级DNS缓存(稍后另说)。

    如果你就一个节点,那么100%的网站用户都会被影响,如果你有两个web节点,如果你很幸运之友一台缓存了故障CDN节点IP,那么只有50%的网站用户被影响。

    更推荐下面的index.html架构。

    index.html中做分离

    index.html中做分离的意思是,所有js,css,等静态资源直接引用CDN上的链接,这么做,web服务器中就比较干净简洁,不需要考虑太多静态资源的缓存处理的逻辑,所有缓存策略可以在CDN控制台中操作。 当然这么做最主要的好处就是当CDN某节点故障,受影响都是一小部分用户,脱离web机器,故障节点IP只会被那个时刻正在使用网站用户的运营商缓存。再简单点说,本来是web服务器DNS缓存加上运营商缓存,现在问题只剩下运营商缓存。

    (阿里云的解释是运营商缓存问题没有解决办法)

    万变不离其中的高效协作,团队管理

    刚起床,因为昨晚加班到2点,让我意识到我必须快速把我头脑中的东西倒出来。 这里主要想描述下我对团队协作管理的一点小总结。

    什么是万变不离其中

    时间是不恒定的,世界是变的。变化才是自然界的唯一法则。

    大到宇宙,千千万世界,千千万法门;小到你每日三餐。

    不同的行业,不同的公司,不同的项目,不同的部门,不同的团队,不同的队员,不同的职责。

    但在我经历的几家公司,几个团队,即使这些公司行业不同,这些团队“背景”不同,但我总是隐约感到团队协作,团队管理,部门协作,公司治理上面是同质的。

    现在让我们从下往上说比较简单容易推导。

    尊重团员,建立自信

    团队成员技能参差不齐,但没有一个是可以‘舍弃’的。唐僧师徒西天取经演化的团队协作的故事就不说了。

    作为领导者必须的素质或者说品质之一:帮助你的团队建立自信。这句话建立在你开始于你尊重每个团队成员,公司员工。

    借用很多“灵魂”演讲经常说的一句话:“你是特殊的,没有人能取代你”。

    在你努力帮助每个团队成员建立自信的过程中,他们爆发出的能量是你不会‘奢望’的。

    团队协作

    敏捷中讲“stable velocity”,当团队稳定后,在协作流程成熟后,产出是稳定的。

    说的土一点,不那么恰当点,养鸡场的鸡每天定时喂养,鸡的数量始终保持一个数量范围,最佳实践完全遵照“规范养殖”说的做,即使个别鸡生病,每天的产蛋量还是可预测的。但是如果你不断的变换鸡饲料,或者把鸡从一个笼子移到另一个笼子,最糟糕的是连“最佳实践”都没有,再好的鸡农也不会保证你每天可以有多少收入。

    * 任务明确

    不要期待你的每个团队成员都可以有分解任务的技能,这个要慢慢熏陶,慢慢培养的。

    作为“服务生”的职责之一是尽早的把一个项目按照用户故事分解为大大小小的任务,每个任务也可以分解为更小的点。

    提早对项目风险评估,及早把任务按照优先级排序。

    如果你已经对团队成员的个性技能有所理解,任务完全可以因人定制。这么说,你可能要问敏捷不是“SELF-MANAGEMENT”吗?我只能说,有些太理想的东西要因时因地,时时变化。

    * 时间边框

    任何事情都不能无止境的做下去,所有的协作都讲究时间点-“DEADLINE”。QA不可能无止尽的测试,无止尽的提BUG。开发不可以揪着一个功能无止境的重构。时间太宝贵。在团队协作的时候,一旦时间点规划好后要严格执行,否则一切努力都会化为灰烬。

    从这里扯一个远的话题,如果你是做乙方,一定遇到过难缠的客户,在项目最后一天,“绞尽脑汁”搞出一堆都称为高优先级的BUG,作为管理者,你要及时尽力“制止”这种行为。

    原因1: 最后一天,团队很可能已经精疲力竭,假设这些“BUG”算作5%的工作量,前期95%的工作已经做完。假设项目上线是1月2日,你想让你的团队1月1日晚上通宵修复5%的bug吗?我的建议是适可而止。团队最劳累的时候出事故的风险最大,头脑不清楚时候的工作可能会让前期95%变为60%,你想这样吗?

    原因2: 你不想告诉你的团队这就是他们以后的工作状态吧?你还有很多工作没有结束,比如稳定军心,保持恒定的团队VELOCITY,降低离职率,保持团队心态身体健康。如果是我,我会努力拒绝剩余5%的BUG,遭来客户的“怨言”。对!我是宁愿得罪客户,也不想让团队成员失去信息的服务生。

    保护好你的时间边框。

    * 保持顺畅的沟通

    感冒了要留鼻涕打喷嚏。人生病了是主要由于上下气血不通。

    工作心情不好了,要有通道即时抒发情绪。如果有通道都没有,人会病怏怏的,团队会效率低下。

    作为“服务生”,项目结束后的“RETROPECTIVE MEETING”是一种,平时吃饭聊天,可以让团队成员抒发情绪。

    以前我在公司中做的最大最在意的努力就是帮助建立上下顺畅的沟通,不要过滤信息,要有周期性。

    最后你会感谢这种沟通,依赖这种沟通。

    用工具取代人力

    我是技术出身。所以喜欢寻找工具取代重复的人力劳动,既可以节省人月成本,也可以保证结果可预测,可信赖。

    举例:

    QA的多少工作可以用自动化测试取代?

    项目伊始,有多少风险需要排查,是否有项目模版可以监测项目风险?

    部门沟通,各种会议有多少可以通过简化流程,规范“NAMING CONVERSATION”[REF-1]来减少并且变得高效?

    REF

    1. NAMING CONVERSATION - 我知道的最早出现在RUBY语言,通过规范各种命名,开发进行语言使用前先学习这种规范,以后看到都是大写字母的命名 就知道它说的是代码中的常量,类似。 以此类推,部门间也可以通过流程工具减少会议时间,看到这个状态表示,就表示是你们部门该做些什么行动了,优先级怎样,类似。

    以上所述,可以将团队改为“部门”或者“公司”通通适用。比如:从尊重公司的每个成员开始。

    新年伊始,阳关洒在房间中,敬畏天地,感谢这个世界。

    万变不离其中的高效协作,团队管理

    刚起床,因为昨晚加班到2点,让我意识到我必须快速把我头脑中的东西倒出来。 这里主要想描述下我对团队协作管理的一点小总结。

    什么是万变不离其中

    时间是不恒定的,世界是变的。变化才是自然界的唯一法则。

    大到宇宙,千千万世界,千千万法门;小到你每日三餐。

    不同的行业,不同的公司,不同的项目,不同的部门,不同的团队,不同的队员,不同的职责。

    但在我经历的几家公司,几个团队,即使这些公司行业不同,这些团队“背景”不同,但我总是隐约感到团队协作,团队管理,部门协作,公司治理上面是同质的。

    现在让我们从下往上说比较简单容易推导。

    尊重团员,建立自信

    团队成员技能参差不齐,但没有一个是可以‘舍弃’的。唐僧师徒西天取经演化的团队协作的故事就不说了。

    作为领导者必须的素质或者说品质之一:帮助你的团队建立自信。这句话建立在你开始于你尊重每个团队成员,公司员工。

    借用很多“灵魂”演讲经常说的一句话:“你是特殊的,没有人能取代你”。

    在你努力帮助每个团队成员建立自信的过程中,他们爆发出的能量是你不会‘奢望’的。

    团队协作

    敏捷中讲“stable velocity”,当团队稳定后,在协作流程成熟后,产出是稳定的。

    说的土一点,不那么恰当点,养鸡场的鸡每天定时喂养,鸡的数量始终保持一个数量范围,最佳实践完全遵照“规范养殖”说的做,即使个别鸡生病,每天的产蛋量还是可预测的。但是如果你不断的变换鸡饲料,或者把鸡从一个笼子移到另一个笼子,最糟糕的是连“最佳实践”都没有,再好的鸡农也不会保证你每天可以有多少收入。

    * 任务明确

    不要期待你的每个团队成员都可以有分解任务的技能,这个要慢慢熏陶,慢慢培养的。

    作为“服务生”的职责之一是尽早的把一个项目按照用户故事分解为大大小小的任务,每个任务也可以分解为更小的点。

    提早对项目风险评估,及早把任务按照优先级排序。

    如果你已经对团队成员的个性技能有所理解,任务完全可以因人定制。这么说,你可能要问敏捷不是“SELF-MANAGEMENT”吗?我只能说,有些太理想的东西要因时因地,时时变化。

    * 时间边框

    任何事情都不能无止境的做下去,所有的协作都讲究时间点-“DEADLINE”。QA不可能无止尽的测试,无止尽的提BUG。开发不可以揪着一个功能无止境的重构。时间太宝贵。在团队协作的时候,一旦时间点规划好后要严格执行,否则一切努力都会化为灰烬。

    从这里扯一个远的话题,如果你是做乙方,一定遇到过难缠的客户,在项目最后一天,“绞尽脑汁”搞出一堆都称为高优先级的BUG,作为管理者,你要及时尽力“制止”这种行为。

    原因1: 最后一天,团队很可能已经精疲力竭,假设这些“BUG”算作5%的工作量,前期95%的工作已经做完。假设项目上线是1月2日,你想让你的团队1月1日晚上通宵修复5%的bug吗?我的建议是适可而止。团队最劳累的时候出事故的风险最大,头脑不清楚时候的工作可能会让前期95%变为60%,你想这样吗?

    原因2: 你不想告诉你的团队这就是他们以后的工作状态吧?你还有很多工作没有结束,比如稳定军心,保持恒定的团队VELOCITY,降低离职率,保持团队心态身体健康。如果是我,我会努力拒绝剩余5%的BUG,遭来客户的“怨言”。对!我是宁愿得罪客户,也不想让团队成员失去信息的服务生。

    保护好你的时间边框。

    * 保持顺畅的沟通

    感冒了要留鼻涕打喷嚏。人生病了是主要由于上下气血不通。

    工作心情不好了,要有通道即时抒发情绪。如果有通道都没有,人会病怏怏的,团队会效率低下。

    作为“服务生”,项目结束后的“RETROPECTIVE MEETING”是一种,平时吃饭聊天,可以让团队成员抒发情绪。

    以前我在公司中做的最大最在意的努力就是帮助建立上下顺畅的沟通,不要过滤信息,要有周期性。

    最后你会感谢这种沟通,依赖这种沟通。

    用工具取代人力

    我是技术出身。所以喜欢寻找工具取代重复的人力劳动,既可以节省人月成本,也可以保证结果可预测,可信赖。

    举例:

    QA的多少工作可以用自动化测试取代?

    项目伊始,有多少风险需要排查,是否有项目模版可以监测项目风险?

    部门沟通,各种会议有多少可以通过简化流程,规范“NAMING CONVERSATION”[REF-1]来减少并且变得高效?

    REF

    1. NAMING CONVERSATION - 我知道的最早出现在RUBY语言,通过规范各种命名,开发进行语言使用前先学习这种规范,以后看到都是大写字母的命名 就知道它说的是代码中的常量,类似。 以此类推,部门间也可以通过流程工具减少会议时间,看到这个状态表示,就表示是你们部门该做些什么行动了,优先级怎样,类似。

    以上所述,可以将团队改为“部门”或者“公司”通通适用。比如:从尊重公司的每个成员开始。

    新年伊始,阳关洒在房间中,敬畏天地,感谢这个世界。

    农历马年新年

    Summary

    是,有时候,很多时候,你不希望时间走得那么快,你只是被“拖”着走到了这里。 2013年依然没有逃脱被动,被动的听,被动的看,被动的做着事情,就像一个生活的奴隶,直到压得喘不过气的时候,或者自己不得不去想对策的时候,... ,慢慢去寻找自己得精神支柱,去强大自己的精神世界。 是的,当时间走到这个点,开始学着往后看,往前看,看自己。

    2013 TODO LIST

    • 身体第一位,继续坚持体育锻炼 - 这条怎么说呢,前半年可以给自己打70分(每天早晨还坚持跑步),后半年只能给个50分(后半年,早晨的时间变得弥足珍贵,晨跑就放弃了,还好继续打球)。
    • 继续管理自己的性格 - 难,太难了。很多场合都是对自己的情绪严加控制,还是表现的另自己不满意。
    • 养娃 - 学习如何养好。 - 就只能给自己20分,感谢孩子她娘,为我分担了大部分的任务。
    • 读书 > 20 本(杂而不偏就可以) - 15本
    • 个人理财规划投资 - 凑合吧,刚摸到点门道
    • 建站 > 1000pv/day 我就心满意足. :-) 还未得道. - 失败,几天1000PV已经不错了

    是啊,自己都觉得2013过得那叫一个不得意啊。

    2014 寄语

    是啊,每年的TODO效果不佳,还不如从精神层面上指导自己更佳。

    • 生活不能告诉你的就去书中寻找吧;
    • 如果你觉得自己做的不好,那就沉下心来做好这个再做别的;如果你觉得做的还不错,就坚持一会,还可以做的更好;如果你觉得做的更好了,可以停下来想想看看,是否还可以汲取更多的养分;
    • 停止浪费未来的筹码,珍惜现有的,好好珍惜;包括:和家人的时间,自己的精力时间,...
    • 爱自己,规划自己。

    寄送过去,迎接未来

    1. 深邃地理解了生活的人,才会在精神上更强大。
    2. 生活包含着更广阔的意义,而不在于我们实际得到了什么;关键是我们的心灵是否充实。对于生活理想,应该象宗教徒对待宗教一样充满虔诚与热情。
    3. 生活中真正的勇士向来默默无闻,喧哗不止的永远是自视高贵的一群。

    “有一天突然翻到了某本书的某一页,惊讶的发现,这个不是已经丢失了很多年的自己吗?去了哪里?做了什么?为什么现在的自己会很认同几年前的自己,而厌恶现在的这个我?” 到了这个年龄,要往后看了。

    最后希望2014年的自己勇敢的坚持自己的梦想。

    互联网中小公司招聘中经常忽视和自大的

    看到太多'不靠谱'的互联网招聘,想喷喷现有的招聘以及我认为靠谱的做法。

    • 中国人的招聘还是不要那么自大吧。在v2ex里面看到一个讨论,我很反对不封顶的写法。很容易推断你的这种说法很是扯淡。反推:不要说什么不封顶,你就说年薪100W招聘一个超级NB的web developer。你敢这么写吗?当然这样说有点极端。我只是想说,你如果说不封顶,我认为你是扯淡。赶快拿掉吧。我不是技术牛人,但我看到这样的字眼,会认为这是一种歧视。就像N年前,广东的工厂跑到云南招聘的时候说的“管吃管住,赚大钱”。是的,你现在知道那些打工者的生活实际情况如何。和你老板商量商量salary写的透明些吧。当然如果你能把我下面即将要说的几点做到了,不写薪资也不是问题。
    • 再则就是有个靠谱的产品,能让我/我们感受到用户的反馈,看到我们的努力的被认可,这是种心灵的安慰。
    • 如果你只招developer,不好意思,我/我们真心不感兴趣。我们是有思想的技术工作者,我们对产品,市场,营销都是有自己的见解和实践。是的,我们不是工具,我们是创造者。一个/一些拥有技术背景、产品嗅觉也不是太差、互联网的起起伏伏也都有些思考的的创新者/颠覆家(好吧,我承认,最后这个词语吹的稍微太大。但我就是要这么写。 :-))。当然这对IT人的职业发展也是很好的建议。
    • 如果你还是遵循老套的上班“制度”(打卡,准时上下班,公司的布局依然老土的老土,etc)。你可能以为我是用google的公司文化来要求你们。那是你的眼界太浅,还没有看的更远。这是未来的趋势。文明的大势。人性化首先是对人的尊重,其次是对你企业的负责。研究表明/亲身经历,好的工程师能集中精力工作4小时,就已经很出色的。当然是保证高质量的产出的前提下。其它的时间要么是在破坏完美的东西,要么是不能集中注意力。总之都是在浪费时间。
    • 不要简单的苛求某种技术人员了,你要知道,大部分技术都是一通二,二通三的。你应该更在意的是这个employee能不能快速高效的完成设计实施。举个例子,比如你说招聘php开发人员,我建议你替换成脚本语言熟练运用(prefer PHP)。因为我相信,写过python/django的应该没有问题handle php/symfony|zend。
    • 福利福利!不要什么公司提供午餐的来诱骗“无知妇女”了。如果吃都成问题,谁有力气/心情去继续下午的工作。我觉得非国定假期的天数少于10天,病假扣工资的公司都不是靠谱/人性的公司。

    先啰嗦那么多吧,不好意思,让你遇到了一个自大的乙方。也希望甲方看到此文,能善待你的员工,以及诚恳的对待即将招聘的人员。

    网站集成linkedin登录

    Linkedin提供了几种方法供你集成登录验证到自己的网站。

    一种是JS plugin的方式。这种方式用起来特别简单,只需要申请您的 app_key 就直接可以使用。 这种方式的缺点就是从linkedin返回的数据没有办法定制,它就只能返回以下五条属性:

    "Field" - "Parent Node" - "Description"
    first-name - person - the member's first name
    last-name - person - the member's last name
    headline - person - the member's headline (often "Job Title at Company")
    site-standard-profile-request/url - person - the URL to the member's authenticated profile on LinkedIn (requires a login to be viewed, unlike public profiles)
    

    第二种就是oauth2.0的方式。

    通过这种方式,你可以除了可以从linkedin拿你想拿的数据,而且可以随心所欲的嵌入到你的业务逻辑里面。

    我就是用的第二种。可以通过LeanProfile查看。

    具体实现可以参考Linkedin 文档。 不过需要说明就是,你需要保留一份用户的token,这个token可以方便你在它的失效期内(60天)向linkedin索要用户的信息。之所以是60天,也是Linkedin从数据安全角度考虑。

    当然用户也可以自己选择是否绑定Linkedin。

    当然更人性化点,我们还提供用户也可以选择绑定和取消绑定Linkedin的功能。

    在验证通过后,您就可以使用linkedin提供的其它的功能,比如:分享,等等

    2013 Resolution

    过去的一年慢慢开始enjoy之前的辛劳。但很多新的挑战接踵而来。我希望记住的是七月中旬那美丽的天空。我希望忘记的是十月和十一月的噩梦。 大脑的活动规律就是你越是希望忘记的东西,它会越拼命的记住。

    一年没见到雪,昨天开始下起。或者过去的一年,也许就在最近某个月曾经下过雪。

    2012 完成的目标

    • 强身健体第一位,具体目标是锻炼腰部腹部肌肉,提高身体协调能力。 去年确实腰部力量明显好于2011年,看来坚持锻炼是王道。但协调能力还有待提高,也许我还没找到答案。
    • 职业发展:
      a. 空间的预测;
      b. 时间的估计,把持重点;
      c. Have a better idea about how to manage team and how to manage company.
      很多东西已经被更重要的事情取代或被看淡。
    • 增加静心休息的时间。 休息的时间至少double 2011年的。
    • 买车。 买好车的第一个月就刮蹭了两次,起初觉得很心疼,现在已经没有感觉。身外之物。
    • 读书>=15本;
      电影>=5;
      Finish 了25本,什么书都有。
    • 完成网站建设,其实现在已经不再是为了完成而完成了。练手;练脑;提高思维的整体性,连续性,可扩展性。 - 该完成的没有完成。不该完成的始终没有起色。
    • 蜜月履行。 日本之行成为了美好的记忆。
    • 去年的时间管理基本满意,需要继续坚持下来。

    2012 Time Spending:

    • 30% - spent @hospital or on the road to hospital
    • 5% - spent at self-building

    2013 TODO LIST:

    • 身体第一位,继续坚持体育锻炼
    • 继续管理自己的性格
    • 养娃 - 学习如何养好
    • 读书 > 20 本(杂而不偏就可以)
    • 个人理财规划投资
    • 建站 > 1000pv/day 我就心满意足. :-) 还未得道.

    2013 WISH LIST(The same as 2012's):

    祝福我,我的家人,我认识的亲戚朋友身体健健康康!