2019 年对很多人来说似乎是艰难的一年,在这个世界愈发趋于动荡和不信任的大背景下,越来越多的疑惑、迷茫和不确定性从上至下笼罩在每一个人可以感知到的日常生活中。或许只是一种周期,或许就是一种趋势,各种事物的分化与混乱变得越来越明显。如果从热力学第二定律的角度来看,维持事物不走向无序是需要额外付出很多努力的,那说明人类社会目前做的共同有效努力还不够;如果从唯物论的发展观来看,事物总是螺旋式向上发展的,周期中同时也蕴含着一些不可逆的改变。把 2019 年放在历史的长河中,我不知道它处在世界发展周期的哪个部分,但很可能不是在「好」(大部分人认为的世俗意义上的「好」)的那一半。这可能是前些年某些事件的发生导致了现在的局面,同时也可能是未来很长一段时间不同局面的开始。

我所感知到的 2019 年,不算好,但好过 2018 年,因为在 2019 年明显可以看到一些好的发展的希望。事情多不一定会让人感觉到累,但感受不到希望是一定会让人想要逃离的。不过,希望仅仅是一种未来往好的方向发展的可能,当变化越来越快的时候,希望也是越来越脆弱的,希望远不是必然。

阅读全文 »

Elixir 作为基于 Erlang/OTP 的年轻语言,拥有良好的并发模型设计,在 Web 场景下对于实现能承载高并发的服务毫无问题。有好事者对比过包括 Phoenix 在内不同的 Web Framework 的性能,可见如果采用 Phoenix/Plug 来实现 Web Server 在性能上不会有太大的问题(代码实现良好的情况下)。所以,本文不会讨论真正的工业生产环境下整个系统的性能状态,因为系统性能受到很多因素的影响,具体编程语言的运行时的执行效率往往不是真正的问题所在,与其考虑编程语言本身的运行时效率,不如探讨系统在具体架构和实现上如何能优化来承载更高的负载来得实际。在生产环境中,我们可以借助 APM 服务来监控系统状态和性能指标。

由于 Elixir 本身是基于 Erlang 的更高层次的抽象,所以直觉上我们会觉得 Elixir 在运行性能上应该比 Erlang 本身要差一些。实际情况是不是这样呢?Elixir 相比于 Erlang 而言,为我们提供了一些可以快速调用的高阶函数库,典型的有 EnumStream,提高了日常实现需求的开发效率,可以让代码实现得更清晰且更易维护。而更高的抽象又几乎必然意味着底层的实现逻辑需要更通用健壮,从而也会更复杂。更高的抽象程度似乎天然与更高的运行效率有着内在的矛盾。本文的焦点在 Elixir 代码的运行性能,即对于实现同样的功能,用哪样的 Elixir 实现方式会让代码在运行时跑得更快。

阅读全文 »

背景介绍

稳定高效的进行数据处理几乎是如今每一家互联网公司都要面临的课题,尤其是对于专注于气象数据研究的我司而言,做数据分析和 ETL 的工作是整个公司业务很重要的一部分。在脱离了原始的「刀耕火种」的时代之后,我们内部一直在使用 Airflow 作为数据处理流程的框架来管理日常的数据流任务。其实我们也调研了很多其他的方案,最后还是选定了看起来相对比较可靠也比较符合我们业务需求的开源项目 Airflow 来做这个事情,虽然在使用的过程中确实也遇到了不少坑。当时这个项目还在 Apache Incubator,目前已经顺利毕业了。

简单介绍一下 Airflow,一般由 WebServer(一套完整的 UI 界面用于随时查看任务的执行状态并可以手动执行一些操作)、Scheduler(用来做任务的调度和管理)、Worker(真正执行任务的部分,可能有很多个)组成。这是一个常见的分布式架构,你只需要把任务流的 DAG 用 Python 代码写好,然后配置好触发条件就可以让它长期运行下去。在实际生产环境中,我们大量使用了 Celery Executor 来把任务动态分布到多个 Worker 上执行。

阅读全文 »

心知天气作为国内领先的商业气象服务提供商,天气数据 API 产品从公司创立以来就一直扮演着很重要的角色。2009 年 API 产品初次上线,历经十年,我们不断用心迭代,已经为数百家企业客户提供了超过 540 亿次稳定可靠的数据服务。在心知天气官网首页一直跳动的调用量数字就实时展示了整个天气 API 产品的服务状态。目前,心知天气数据 API 的 QPS 在高峰时期已经达到数千的量级,如何承载这样海量的并发请求,使客户能稳定及时的获取到所需数据自然也是心知技术团队一路以来不断探索的主题。

图片显示错误
阅读全文 »
0%