Mobabel Blog

0

[转]ZooKeeper搞定服务注册与发现

1. 背景 最近在做分布式相关的工作,由于人手不够只能我一个人来怼;看着这段时间的加班表想想就是够惨的。 不过其中也有遇到的不少有意思的事情今后再拿来分享,今天重点来讨论服务的注册与发现。 2. 分布式带来的问题 我的业务比较简单,只是需要知道现在有哪些服务实例可供使用就可以了(并不是做远程调用,只需要拿到信息即可)。 要实现这一功能最简单的方式可以在应用中配置所有的服务节点,这样每次在使用时只需要通过某种算法从配置列表中选择一个就可以了。 但这样会有一个非常严重的问题: 由于应用需要根据应用负载情况来灵活的调整服务节点的数量,这样我的配置就不能写死。 不然就会出现要么新增的节点没有访问或者是已经 down 掉的节点却有请求,这样肯定是不行的。 往往要解决这类分布式问题都需要一个公共的区域来保存这些信息,比如是否可以利用 Redis? 每个节点启动之后都向 Redis 注册信息,关闭时也删除数据。 其实就是存放节点的 ip + port,然后在需要知道服务节点信息时候只需要去 Redis 中获取即可。 如下图所示: 但这样会导致每次使用时都需要频繁的去查询 Redis,为了避免这个问题我们可以在每次查询之后在本地缓存一份最新的数据。这样优先从本地获取确实可以提高效率。 但同样又会出现新的问题,如果服务提供者的节点新增或者删除消费者这边根本就不知道情况。 要解决这个问题最先想到的应该就是利用定时任务定期去更新服务列表。 以上的方案肯定不完美,并且不优雅。主要有以下几点: 基于定时任务会导致很多无效的更新。 定时任务存在周期性,没法做到实时,这样就可能存在请求异常。 如果服务被强行 kill,没法及时清除 Redis,这样这个看似可用的服务将永远不可用!...

0

[转]你不可不知的10个深度学习方法

过去十年来,人们对机器学习的兴趣经历了爆炸式的增长。你几乎每天都能在计算机科学程序、行业会议和《华尔街日报》(Wall Street Journal)上看到机器学习的影子。在所有关于机器学习的讨论中,许多人都将机器学习能够做什么,与他们希望机器学习能够做什么混为一谈了。从根本上来说,机器学习就是使用算法从原始数据中提取信息,并在某种类型的模型中表示出来。我们使用这个模型来推断我们尚未建模的其他数据。

[转]MongoDb优化指南 0

[转]MongoDb优化指南

1. 1 为什么选择MongoDB? 1.性能 在大数据时代中,大数据量的处理已经成了考量一个数据库最重要的原因之一。而MongoDB的一个主要目标就是尽可能的让数据库保持卓越的性能,这很大程度地决定了MongoDB的设计。在一个以传统机械硬盘为主导的年代,硬盘很可能会成为性能的短板,而MongoDB选择了最大程度而利用内存资源用作缓存来换取卓越的性能,并且会自动选择速度最快的索引来进行查询。MongoDB尽可能精简数据库,将尽可能多的操作交给客户端,这种方式也是MongoDB能够保持卓越性能的原因之一。

0

[转]MySQL优化指南

当MySQL单表记录数过大时,增删改查性能都会急剧下降,所以我们本文会提供一些优化参考,大家可以参考以下步骤来优化: 1. 一、单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度。一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的,而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量。

[转]Objective-c:写一份可测试的代码 0

[转]Objective-c:写一份可测试的代码

1. 前言 单元测试由程序员编写,最终又服务于程序员,但是在面对编写时复杂而繁琐的依赖注入、IoC,不禁让人思考这是否有必要。所以本文会探讨如何高效地编写一份具有可测试性代码的同时,保持代码的整洁与可理解性。 在这篇文章中我会使用 OCMock + XCTest 作为基本的测试框架,如果你没有这方面的知识可以先提前了解,但我也会在对应模版代码中添加注释,方便大家理解。

0

[转]设计一个百万级的消息推送系统

1. 前言 先简单说下本次的主题,由于我最近做的是物联网相关的开发工作,其中就不免会遇到和设备的交互。 最主要的工作就是要有一个系统来支持设备的接入、向设备推送消息;同时还得满足大量设备接入的需求。 所以本次分享的内容不但可以满足物联网领域同时还支持以下场景: 基于 WEB 的聊天系统(点对点、群聊)。 WEB 应用中需求服务端推送的场景。 基于 SDK 的消息推送平台。

0

[转]详解分布式协调服务 ZooKeeper

在 2006 年,Google 发表了一篇名为 The Chubby lock service for loosely-coupled distributed systems 的论文,其中描述了一个分布式锁服务 Chubby 的设计理念和实现原理;作为 Google 内部的一个基础服务,虽然 Chubby 与 GFS、Bigtable 和 MapReduce 相比并没有那么大的名气,不过它在 Google 内部也是非常重要的基础设施。 相比于名不见经传的 Chubby,作者相信 Zookeeper 更被广大开发者所熟知,作为非常出名的分布式协调服务,Zookeeper 有非常多的应用,包括发布订阅、命名服务、分数是协调和分布式锁,这篇文章主要会介绍 Zookeeper 的实现原理以及常见的应用,但是在具体介绍 Zookeeper 的功能和原理之前,我们会简单介绍一下分布式锁服务...

[转]DAG、Workflow 系统设计、Airflow 与开源的那些事儿 0

[转]DAG、Workflow 系统设计、Airflow 与开源的那些事儿

DAG (Directed Acyclic Graph) 是一个非常有用、也有很有意思的数据结构。如果说数组、链表、二叉树这类数据结构是学习中的基础,那么 DAG 绝对算得上工作中常常会听到、用到的实践知识。工作中两个 SDE 讨论技术问题,DAG 和 Array/Linkedlist/Tree 算的上是同一级的词汇、知识,默认彼此都懂。 下面我们详细讲讲原因:有向无环图 (DAG),结合拓扑排序(topolocial sort)的确是解决存在依赖关系的一类问题的利器。

[转]实现 Android 支付宝商家收款语音播报 0

[转]实现 Android 支付宝商家收款语音播报

1. 1动机 支付宝商家收款时,语音提示:支付宝收款xxx元,当时觉得这东西还挺有趣的,第一时间通知给商家,减少不必要的纠纷,节约时间成本,对商家对用户都挺好的。 我们产品先做了<我的钱包>,现在也希望在商家版有这样收款播报的功能,我觉得挺好的。 2.

0

[转]如何从0写一个服务网关?

1. 0 引言 1-1-1. 什么是网关?为什么需要使用网关? 如图所示,在不使用网关的情况下,我们的服务是直接暴露给服务调用方。当调用方增多,势必需要添加定制化访问权限、校验等逻辑。当添加API网关后,再第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制。 本文所实现的网关源码抄袭了—Oh,不对,是借鉴。借鉴了Zuul网关的源码,提炼出其核心思路,实现了一套简单的网关源码,博主将其改名为Eatuul。