当前位置: 首页 > news >正文

嘉峪关市网站建设_网站建设公司_SEO优化_seo优化

iapp用网站做软件代码,财务公司加盟哪个比较好,wordpress自适应框架,国际新闻报道在2015年初我们创建了一个微服务#xff0c;它只做一件事#xff08;也确实做得很好#xff09;就是地理围栏查询。一年后它成了Uber高频查询#xff08;QPS#xff09;服务#xff0c;本次要讲的故事就是我们为什么创建这个服务#xff0c;以及编程语言新秀Go如何帮我们… 在2015年初我们创建了一个微服务它只做一件事也确实做得很好就是地理围栏查询。一年后它成了Uber高频查询QPS服务本次要讲的故事就是我们为什么创建这个服务以及编程语言新秀Go如何帮我们快速创建和扩展该服务。 背景 在Uber一个地理围栏就是在地表人为定义的地理区域或多边形几何区域。地理围栏在Uber被广泛用于基于地理位置的设置。向用户展示给定区域有哪些产品可以使用根据特殊需要如机场定义区域并在乘车高峰时在相邻区域实施动态定价是我们产品的重要应用场景。 一个科罗拉多地理围栏示例。 第一步是通过用户手机获取地理位置信息如经纬度进而确定用户所在地理围栏。这个功能分散在多个服务或模块中。因为我们从整体架构向微服务架构迁移我们选择将这个功能做成一个新的微服务。 使用Go语言 Node.js曾经是我们实时市场团队主力开发语言所以我们在Node.js上有较多的知识储备和经验。但是Go在以下几个方面更符合我们的需求 1、高吞吐低延迟的需要。Uber手机应用中的每个请求都需要地理围栏查询而且响应快速99% 100毫秒频繁每秒成千上万 2、适用于CPU密集型。地理围栏查询是点聚计算的CPU密集型服务。Node.js非常适合我们其他I/O密集型应用但由于Node天生就是解释型动态语言所以它不适合此类应用。 3、非中断后台加载。为了给查询服务提供最新的地理围栏数据服务需要在后台不断的从多个数据源加载内存数据。因为Node.js是单线程的所以后台更新会对CPU造成较长时候的堵塞例如CPU密集的JSON解析从而影响到查询响应时长。但Go不存在这些问题因为goroutines 可以使用多核后台任务和前台查询可以并行。 是否使用地理信息索引这是一个问题 通过经纬度指定一个地理位置后如果从我们成千上万的地理围栏中确定它属于哪一个简单粗暴的做法是使用点聚检查方式如光线投射算法从所有地理围栏数据中查找。但这种式太慢。所以我们如何缩小查询范围以提高效率 我们没有使用R-tree做地理围栏索引和比较复杂的S2通过观察我们发现Uber的业务模式是以城市为中心的业务规则和地理围栏通常用一个城市来定义所以我们选择了一个简单的路由方式。我们把地理围栏整理为两层结构第一层是城市地理围栏定义城市边界第二层是每个城市内的地理围栏。 对于每个查询我们首先对所有城市地理围栏做线性扫描查找所在城市然后对该城市的地理围栏数据做线性扫描。这个解析方案的运算复杂度是O(N),  通过这个简单的技术我们将N从10,000s减少到100s。 架构 我们希望这个服务是无状态的这样每个请求可以发送到任意实例而且得到结果是一致的。这意味着每个实例都拥有全量数据而不是只存储部分数据。我们生成了一个统一的拉取计划这样不同服务实际的地理围栏数据可以保持同步。因面这个服务的架构也就变得简单。后台任务定时从不同的数据存储拉取地理围栏数据。这些数据是在内存中存储以提高查询速度当服务需要重启时会序列化到本地文件。 我们的地理围栏数据查询架构 处理Go内存模型 在我们的架构中需要对内存中的地理索引数据并发读写。当后台拉取任务写索引时可能前台查询引擎同步读取索引。有Node.js经验的人熟悉了单线程模式Go的内存模型对他们是一个挑战。这对我们曾产生对负面影响。我们试图使用sync/atomic 包的原语StorePointer/LoadPointer 来管理内存边界问题但这导致代码很脆弱且难以维护。 最后我们采取了折中的方式使用读写锁来异步处理对地理索引的访问。为了减少锁的争夺新的索引在以原子的方式合并到主索引之前先建立索引片段。与 StorePointer/LoadPointer的方式相比这些稍微增加一些延迟但我们有理由相信代码的简洁和可维护性比这一点小小的延迟更有价值。 我们的经验 回顾以往我们很庆幸当初使用Go语言并使用这种新的语言开发我们的服务。亮点如下 1、开发效率高。C,Java和Node.js的开发者只需要很短的时间就可以掌握Go代码易于维护。静态语言更加清晰没有莫名其妙的意外。 2、在吞吐量和延迟方面性能很好。我们主数据中心有针对非中国区的独立服务在2015年度高峰期间40台服务器在170k QPS的负载情况下CPU只使用了35%。95%的响应时间小于5毫秒99%的响应时间小于50毫秒。 3、超级稳定这个服务自上线以来99.99%的时间正常运转。当机时间主要是由初学者的编程错误和第三方库的文件描述符泄露导致。我们至今尚未遇到Go的运行时错误。 接下来 过去Uber主要使用Node.js和Python,很多Uber新的服务开始选择使用Go来创建。Go是Uber未来的趋势所以如果你对Go很有激情无论是专家还是初学者都欢迎你来应聘我们正在招聘Go开发者噢对了传送门请点这里 图片来源“金门地鼠”作者Conor Myhrvold摄于三藩市的金门公园。标题解释地鼠Go gopher是Go项目的吉祥物是Go的标识。
http://www.ihoyoo.com/news/8246.html

相关文章:

  • 网站全局变量网站建设源程序
  • 营销型网站解决方案怎么查网站备案信息
  • 赤峰市做网站最好的ppt模板网站
  • 平台商城网站开发珠海网络推广
  • 网站布局设计规则手机网站运营
  • 免费申请logo烟台网站排名优化价格
  • 重庆永川网站建设价格wordpress 简码插件
  • 一台电脑如何做网站南通企业网站制作
  • 管理系统网站模板下载房地产估价师考试
  • 网站功能模版公司网站备案怎么弄
  • 陇城科技网站建设青岛做网站哪家优化好
  • 建设银行申请信用卡网站首页厦门茶叶公司 网站建设
  • asp.net微信网站免费自己开发app软件
  • wordpress怎么不调用文字内容天天seo百度点击器
  • 有哪些做画册的网站设计自己的专属logo
  • php网站开发软件自己写的html放入wordpress
  • 阿里巴巴国际站网页版湘潭网站
  • 大连网站制作怎么做南宁市保障住房建设管理服务中心网站
  • 山西网站的公司深圳设计品牌网站
  • 做网站app要多钱aso应用优化
  • 做网站的颜色国内h5网站欣赏
  • 免费行情软件app网站下载大全广告设计与制作专业培训
  • 网站ui设计学的是什么wordpress站内搜索插件
  • 代理招商平台seo网站优化方案书
  • wordpress全站采集wordpress 数据表设计
  • 泰安手机网站建设报价企业搜索平台
  • 营销型网站建设大概多少钱18款禁用网站app入口
  • 学校网站源码html免费按模板制作微网站
  • 平湖公司做网站高效省心的app定制开发平台
  • 北京建网站公司哪家便宜上海团购网站建设