• 关于

    查询附近的人

    的搜索结果

问题

mongo距离范围查询的问题

落地花开啦 2019-12-01 20:01:45 814 浏览量 回答数 1

回答

不会的功能建议去发贴,咨询思路,有了思路,再查相应的知识如附近的人,首先你软件里需要记录使用人的位置,存放在数据库中,然后取当前你的位置,位置查询在附近(如500米内)根据gps坐标进行计算在这个范围内的人,然后显示

爵霸 2019-12-02 02:46:51 0 浏览量 回答数 0

回答

你需要一个服务器,每个客户端应用获取自己的gps坐标报告给服务器。当你查询附近的人,服务器就计算并且返回距离在一定范围内的人。 如果你还不会,你可以google。善于使用google对于学习来说很重要。

爵霸 2019-12-02 02:49:47 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

问题

关于java服务端和安卓客户端间传递数据的疑问?

爵霸 2019-12-01 19:37:33 963 浏览量 回答数 1

问题

关于java服务端和安卓客户端间传递数据的疑问?

蛮大人123 2019-12-01 20:27:21 921 浏览量 回答数 1

问题

删除查询在MySQL中不起作用?mysql

保持可爱mmm 2020-05-13 14:40:47 1 浏览量 回答数 1

回答

回 2楼(xiaogangqq123) 的帖子 Mysql或Mssql在一般的场景下都能轻松支持这个量级的数据,如果担心性能问题,最好仔细说一下你的应用场景,可以让大家帮你判断一下,举个例子哈,比如是LBS应用,需要检索LBS数据来获取附近的人,前端数据库如果直接用mysql或mssql就很够呛,所以你最好说清楚一点,直接千万级别数据的简单查询的话,你熟悉哪个就用哪个即可

mayle 2019-12-02 00:43:03 0 浏览量 回答数 0

问题

PHP / MySQL中的地理搜索(距离)(性能)?mysql

保持可爱mmm 2020-05-17 11:58:48 2 浏览量 回答数 1

问题

春节抢了多少红包?一起来聊聊今年最火AR红包技术吧!

李博 bluemind 2019-12-01 21:59:46 2594 浏览量 回答数 0

问题

电商网站报错 

kun坤 2020-06-10 13:22:52 26 浏览量 回答数 2

回答

410 时区位置Web服务 Google Maps时区API 必应地图时区API Azure Maps时区API GeoNames时区API TimeZoneDB API AskGeo-商业(但可以说比GeoNames更准确) GeoGarage时区API-商业,主要针对航海时区。 原始时区边界数据 时区边界生成器 -从OpenStreetMaps地图数据生成时区shapefile。包括海岸线附近的领水。 以下项目以前是时区边界数据的来源,但不再得到积极维护。 tz_world-来自Eric Muller的原始shapefile数据 whereonearth-timezone-合并了WOEDB数据的GeoJSON版本 时区地理位置离线实现 使用时区边界生成器数据的实现 node-geo-tz -JavaScript库(仅Node.js) 时空-JavaScript库 tz-lookup -JavaScript库 GeoTimeZone-.NET库 地理时区 -PHP库 timezonefinder -Python库 ZoneDetect -C库 Timeshape -Java库 TimeZoneMap -Java和Android库 lutz -R库 Go-tz -Go库 时区查询 -Go库 使用较旧的tz_world数据的实现 latlong -Go库(另请阅读此帖子。) TimeZoneMapper -Java库 tzwhere -JavaScript /节点库 pytzwhere -Python库 timezone_finder -Ruby库 LatLongToTimeZone -Java和Swift库 现在几点了?-描述PHP和MongoDB的博客文章 Rundel /时区 -R库 调用其中一种Web服务的库 时区 -调用GeoNames的Ruby gem AskGeo有自己的库,可以从Java或.Net进行调用 GeoNames拥有几乎所有内容的客户端库 其他想法 使用R-Tree查找最近的城市 使用MySQL查找最近的城市 如果您知道其他任何人,请更新此列表 另外,请注意,最接近城市的方法可能不会产生“正确”的结果,只是一个近似值。 转换为Windows区域 列出的大多数方法将返回IANA时区ID。如果需要转换为Windows时区以便与TimeZoneInfo.NET中的类一起使用,请使用TimeZoneConverter库。 不要使用zone.tab 该时区信息数据库包括一个名为文件zone.tab。该文件主要用于提供时区列表供用户选择。它包括每个时区的参考点的纬度和经度坐标。这样可以创建突出显示这些点的地图。例如,请参见moment-timezone主页上显示的交互式地图。 尽管可能很想使用此数据从纬度和经度坐标解析时区,但请注意这些是点而不是边界。最好的办法是确定最接近的点,在许多情况下,这不是正确的点。

你的答案 2020-05-08 20:48:03 0 浏览量 回答数 0

问题

什么是B+树 6月1日【今日算法】

游客ih62co2qqq5ww 2020-06-01 14:50:52 1 浏览量 回答数 1

回答

Logistics Sci—Tech No.10,2008 · 军事物流· 物流科技2008年第1O期 摘 要:现代军事物流是信息化战争后勤保障的重要支 撑。随着信息技术的不断发展, 卫星定位系统逐渐应用于军 事物流领域,成为现代军队战斗力的倍增器。文章介绍了卫 星定位系统概况, 阐述了卫星定位系统在军事物流领域的应 用现状,对军事物流领域应用卫星定位系统的前景及思路进 行了探讨。 关键词:卫星定位系统;军事物流;应用 中图分类号:E075 文献标识码:A 文章编号:1002—3100 f2008) 10—0071—03 Abstract: Modern military logistics is one of the important pans of logistics under informationization war. Nowadays, satellite positioning system is applied in the field of military logistics gradually with the development of information technology. This paper introduces the general situation of satellite positioning system,analyses its current and future application in the field of military logistics, discusses the development ideaS of applying satellite positioning system in the field of military logistics. Key words:satellite positioning sy stem;military logistics;application 军事物流是指军事物资经由筹措、运输、储存、包装、维修保养、配送等环节,从供应地向部队用户有序流动的过程ll】。 卫星定位系统作为当今最先进的信息设施之一,是提高军事物流信息化建设水平,增强部队战斗力不可缺少的技术工具和手段 。 在现代军事物流活动中,重视这~ 技术的创新和推广应用,将快速实现对军事物流的实时监控,从而有效提高信息化战争的后 勤保障效能 1 卫星定位系统概况 卫星定位系统是利用多颗人造地球卫星、地面控制设备和信号接收设备,对地面静态或动态目标进行定位和导航的系统。 目前,全球正在运行或研制中的卫星定位系统有美国全球定位系统(Global Positioning System.GPS)、俄罗斯全球卫星导航系 统(GLONASS)、欧盟伽利略导航卫星系统计划(GALILEO)和中国“北斗一号” 卫星导航定位系统。 GPS是美国军方20世纪70年代研制的军民两用卫星定位系统,军用加密,民用降低定位精度后在全球使用,在用户数量 上处于霸主地位。GLONASS是由原苏联(现由俄罗斯)国防部独立研制和控制的第二代军用卫星导航系统, 其建立目的主要 是避免在军事上受制于美国。由于种种原因, 目前处于“半可用”状态,市场中GLONASS设备极少,产品多是内置GLONASS 和GPS两种接收装置, 以提高精度和可用性。同样出于避免受制于美国的目的.欧盟2003年也开始了GALILEO计划.建造世 界上第一个非军方控制和管理的民用』J星导航定位系统.预计2010年正式投入商业运行 这3个系统都是全球卫星导航定位 系统,导航范围覆盖全球。中国“北斗一号” 系统则是覆盖我国本土的区域导航定位系统, 目前拥有5颗导航卫星,除具有导 航功能外,还具有短报文通信和精密授时功能。在2008年南方抗击雨雪冰冻和四川特大地震灾害中初露锋芒.在北京奥运会 期间将为交通调度和场馆监控提供服务。 GPS导航系统是被动式伪码单向测距三维导航,采用的是无源定位。定位数据由用户设备独立解算, 因此不能提供通讯服 务。 “北斗” 系统是主动式双向测距二维导航,采用的是有源定位.定位数据由地面控制中心解算后提供给用户,用户需要通 过地面中心站联系及地面中心站的传输;因此可以提供通讯服务,通讯不必通过其他的通讯卫星.实现了一星多用。 GPS、GLONASS、GA[ ILEO和“北斗” 系统对比见表1 2 卫星定位系统在军事物流领域的应用现状 卫星定位系统的建立源于军事目的,美国GPS在近几场局部战争中应用于指挥控制、兵力投送、精确制导、目标侦察、战 场救援、军事物流等各个方面,成为美军战斗力的倍增器。尤其在伊拉克战争中,超大量战争物资运输保障,战时补给,大兵 团诸军兵种的专用装备保障,没有GPS 的导航和定位,军事物流则难以实现适时、快速、精确的保障,也就很难在短时间内 结束战斗并取得战斗的胜利 。近几年,我国加紧研发中国“北斗” 系统,引进对GPS的应用.逐渐将卫星定位系统应用于军 收稿日期:2008~06—24 作者简介: 白 娟(1973一),女,山东济南人,后勤指挥学院研究生五队硕士研究生,研究方向:军事物流信息化建设。 卫星定位系统在军事物流领域应用现状及前景探讨 表1 GPS、GLONASS、GALILEO和“北斗” 系统对比表 美国GPS 俄罗斯GL0NASS 欧盟GALILE0 中国“北斗” 系统 研制时间 20世纪70年代 20世纪70年代中期 1999年2月 2000生 卫星个数 28 24 30 5 轨道高度(KM) 20 186 l9 l00 23 222 36 0o0 运行周期 l1:15:44 l1:15:00 14:22:00 l1:58:00 民用单频CA码 民用单频CA码 CA码 调制码 军用双频P码 军用双频P码 P码 定位精度 CA码约l2米 水平方向约l6米 水平定位精度优于10米 约30米 P码小于10米 垂直方向约25米 覆盖范围 全球 全球 全球 中国及周边地区 主要功能 定位导航导航定位、短报文通信、 . 精密授时 定位导航,精密授时 定位导航.精密授时 精密授时 优点优点:投资小、用户设 : 全天候: 全球覆盖; 三维 由于GL0NASS卫星发 该系统提供三种导航定 备价廉 。定速定时高精度缺点: 不能覆 :快速省时高效 射的载波频率不同. 可 位信号 率: 免费信号、收 盖两极地区. 赤道附近 系统特点 : 应用广泛多功能。缺点:信 以防止整个卫星导航系 费加密信号 、号存在易损性和丢失性满足更高 定位精度差:不能满足 . 抗干扰 统同时被敌方干扰. 因 要求的收费加密信号 , 能力差高动态和保密的军事用 : 定位精度受美国军方限 而具有更强的抗干扰能 供各种不同的用户使用 户要求 . 书1 力 用户数量受一 定限制 民用领域: 用于航空/航海导航、 大地测量、石油勘探、地震测量、 由于种种原因. 目前处 野外救生、探险、森林防火、飞 于“半可用” 状态. 市 机播种、农田耕种、车辆自动导 场中GL0NASS设备极 2010年正式投入商业运 使用者基本是军队等国 应用现状 航监控、机场,港13'交通管理等诸 少, 而且多是美国产品, 行 家用户. 市面上很少有 多方面军用领域: 美军用于指挥 内置GL0NASS和GPS 北斗星的接收机出售 控制.兵力投送、精确制导、目 两种接收装置. 以提高 标侦察、战场救援、军事物流等 精度和可用性 方面 主动式双向测距二维导 定位原理 被动式伪码单向测距三维导航航。定位数据由地面控 , 定位数据由用户设备独立解算 制中心解算后提供给用 事物流领域,但仍处于初级阶段,其应用主要体现在以下几个方面 2.1 对军事物资运输的监控调度 通过将卫星定位系统的用户接收机安装在军用车辆、飞机、舰船上实现对军事物资运输的监控调度。利用卫星定位系统和 电子地图GIS可实时显示出运输工具的实际位置与轨迹,从而对其进行实时、有效的定位、监控和调度。实现方式是运输工具 通过终端接收导航定位信息,经处理后,将数据按一定格式由无线电收发机传送到指挥中心,指挥中心接收机将接收到的数据 输入计算机,经处理,在电子地图中显示运输工具和物资位置。 2.2 对军事运输路线的导航规划 选择正确、便捷的运输路线,是实现军事物流快速保障的前提条件。运用卫星定位系统的导航规划功能则充分满足了这一 需求。卫星导航系统的路线规划功能包括自动、手动和指令式3种。自动式路线规划是由驾驶员确定起点和终点,由计算机软 件按照要求自动设计最佳路线。手动式路线规划是驾驶员根据自己的目的地设计起点和终点等,系统在电子地图上设计路线, 同时显示运行途径和方向。指令式路线规划是指指挥中心对行驶站点的时间和路线能作出有效反应,提出路线的规划,并给运 输工具发出导航指令。实现方式是将卫星定位终端与计算机相连接,实现数据的实时传输,以电子地图的形式显示导航数据。 2-3 对需求信息的查询 在军事运输途中,卫星定位系统可以提供主要物标,在电子地图上根据需要进行查询,显示其位置。同时指挥中心可以利 用监测控制台对所在位置进行查询,车辆及物资信息则以数字形式在指挥中心的地图上显示出来。此外,利用卫星定位系统记 录和储存保障物资详细的运输内容和信息,消除了很多需要人工处理的环节,使得整个军事物流系统中所有程序及信息系统实 现信息传输的快速、准确、一致。 2 4 对险情、事故的紧急救援 72 {) ij¨P S t ~1 t lj 20~)g.{O 卫星定位系统在军事物流领域应用现状及前景探讨 通过卫星系统定位和监控管理系统可以对遇有险情或发生事故的地方进行紧急援助。监控台的电子地图显示求助信息和报 警目标,规划最优援助方案,并以报警声光提醒监控人员进行应急处理。我国自主研制的“北斗一号”卫星定位系统在四JIl汶 JIl地震救援中不仅实时监测到了救援部队的行进状态,而且在通信中断的情况下充分发挥了其短报文通信的功能,保障了救援 的顺利展开。 3 卫星定位系统在军事物流领域的应用前景 3.1 应用于建立网络化军事物流保障体系 军事物流保障网络化是信息化条件下一体化联合作战的要求,是指通过多种信息技术将各个物资保障网点(如物流中心、 后方基地、仓库等)集成为军事物流保障网,实现物流配送实体网络和信息网络的“无缝链接”,从而在战争中以实时的快速 反应、精确的投向投量和灵敏高效的指挥调度实现适时、适地、适量的后勤保障。卫星定位系统在军事物流网络化建设中具有 不可替代的作用,主要体现在功能多、精度高、覆盖面广,是构建网络的最佳技术设施和应用平台; 二是构筑在卫星定位系 统的网络公共平台,具有开放度高、资源共享程度高等优点,无地域性限制的信息获取,提高了定位系统的利用率。 3.2 应用于军事物流资产可视化管理 信息化条件下,战场透明度越来越高,物资储存和运输的可见性变得至关重要。物流资产可视化管理是依赖计算机技术、 网络技术、数据库技术、自动识别技术、卫星定位技术等多种信息技术,实现物资在储、在运、在处理全过程的数据跟踪可 视.使得部队指挥官可以不问断、可视化地掌握全部后勤资源的动态情况,全程跟踪“人员流”、 “装备流” 和“物资流”,并 指挥和控制其接收、分发和调换。在运资产通常是装载于某种运输工具,如火车、飞机、轮船、汽车等。实现在运资产可视 化,首先要掌握运输工具的实时位置,而掌握移动中的运输工具的实时位置离不开卫星定位系统。卫星定位系统在军事物流资 产可视化的应用,集中在两个主要方面:其~ 。卫星定位系统用于提供运输工具的位置数据。其二,卫星通信可使控制站和驾 驶员实现双向信息交流。有效运用卫星定位系统,形成有力的统一组织指挥中心,能够提高物流管理的透明度,为优质、高效 的物流保障提供坚实的技术平台。 3-3 应用于实现精确主动配送式保障模式 精确主动配送式保障是指在精确预测部队需求的前提下,打破过去那种逐级前送、被动等待的后勤保障运行机制,通过将 所需物资主动配送到战斗单位乃至士兵,使补给速度发生质的变化,是现代化军事物流保障模式的研究方向。物流配送的过程 是实物的空间位置转移过程,在物流配送过程中,涉及到货物的运输、仓储、装卸、送递等处理环节,对各个环节涉及的问题 如运输路线的选择、仓库位置的选择、仓库的容量设置、合理装卸策略、运输车辆的调度和投递路线的选择等进行有效的管理 和决策分析将有助于物流配送有效地利用现有资源, 降低消耗,提高效率。卫星定位系统解决了物流配送过程中运输车辆调度 和投递路线选择、精确定位部队用户等诸多问题,有利于提高物资的补给速度,从而实现精确主动配送式保障。 4 军事物流领域应用卫星定位系统的发展思路 目前.卫星定位系统在军事物流信息化建设的应用基本上还处于起步阶段,要实现这项技术的全面推广和运用.建立适应 我军后勤发展的军事物流系统,可以从以下几个方面着手: (1)加强卫星定位系统在军事物流领域推广应用的组织领导。由总部牵头统一组织规划、统一技术体制、统一信息标准、 统一软件开发,并与作战指挥系统兼容,从研究开始就杜绝卫星定位系统在军事物流领域应用中各自为政、互不统一、缺乏系 统集成等问题的出现。再就是加强军地合作,把军队的资源优势和地方的技术优势整合起来,共同研制、发展新技术,以保证 其在军事物流领域应用的有效性 (2)开展规划研究、突破关键技术。从顶层对研究项目进行规划设计,并根据我军现状确定当前及今后一段时期内卫星 定位系统在军事物流领域应用的重点和难点。必须立足于新技术引进后的自主开发和创新,形成自己的技术.组织科研力量协 力攻关,力争解决自主技术与外军技术相结合、抗干扰、精度限制、加密技术等关键难题,为卫星定位系统在军事物流信息化 建设中的进一步应用做好准备。 (3)研发基于卫星定位系统等先进信息技术的军事物流应用平台, 建设相关实验室,着眼未来信息化战争实际.跟踪国 内外、军内外卫星定位系统应用研究发展动态,积极探索卫星定位系统在我军军事物流领域的应用研究.以带动全军后勤信息 化的发展。 (4)在后勤保障部队试点后推广。选择部分后勤保障部队进行实验试点,使得卫星定位系统的应用真正与部队建设的实 际结合起来,通过解决实际中遇到的各种问题,不断完善卫星定位系统在军事物流建设的应用研究。从而最大限度地挖掘整个 军事物流系统的保障潜力,使我军后勤保障实现质的飞跃。 参考文献: [1】王宗喜,徐东.军事物流学[M].北京:清华大学出版,2007. 【2] 谭建中.物流信息技术【M】.北京: 中国物资出版社,2008. 【3】戢觉佑,王京海.美军后勤理论与实践【M】.天津:海军后勤学院,2003. f4】徐卫东.GPS+GLONASS+GALILEO三星跟踪技术【JJ_全球定位系统,2006(1):16—18 { 《' ;H s ( {l 200S {f) 73

管理贝贝 2019-12-02 01:16:43 0 浏览量 回答数 0

回答

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右。对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 。为什么我们又不能说轻视它?第一,我们看它的数据存储,每天一百万的话,一年数据量的规模是多少?其次,刚才说的订单量,每一个订单要推送给附近的司机、司机要并发抢单,后面业务场景的访问量往往是前者的上百倍,轻松就超过上亿级别了。 今天我想从架构的本质谈起之后,希望大家理解在做一些建构设计的时候,它的出发点以及它解决的问题是什么。 架构,刚开始的解释是我从知乎上看到的。什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像。更抽象一点,说架构其 实 是 对 我 们 重复性业务 的抽象和我 们 未来 业务 拓展的前瞻,强调过去的经验和你对整个行业的预见。 我们要想做一个架构的话需要哪些能力?我觉得最重要的是架构师一个最重要的能力就是你要有 战 略分解能力。这个怎么来看呢: 第一,你必须要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中体现在方方面面,从定义一个函数,到定义一个类,到提供的一个服务,以及模板,背后都是要去重提高可复用率。 第二, 分类能力。做软件需要做对象的解耦,要定义对象的属性和方法,做分布式系统的时候要做服务的拆分和模块化,要定义服务的接口和规范。 第三, 算法(性能),它的价值体现在提升系统的性能,所有性能的提升,最终都会落到CPU,内存,IO和网络这4大块上。 这一页PPT举了一些例子来更深入的理解常见技术背后的架构理念。 第一个例子,在分布式系统我们会做 MySQL分 库 分表,我们要从不同的库和表中读取数据,这样的抽象最直观就是使用模板,因为绝大多数SQL语义是相同的,除了路由到哪个库哪个表,如果不使用Proxy中间件,模板就是性价比最高的方法。 第二看一下加速网络的CDN,它是做速度方面的性能提升,刚才我们也提到从CPU、内存、IO、网络四个方面来考虑,CDN本质上一个是做网络智能调度优化,另一个是多级缓存优化。 第三个看一下服务化,刚才已经提到了,各个大网站转型过程中一定会做服务化,其实它就是做抽象和做服务的拆分。第四个看一下消息队列,本质上还是做分类,只不过不是两个边际清晰的类,而是把两个边际不清晰的子系统通过队列解构并且异步化。新浪微博整体架构是什么样的 接下我们看一下微博整体架构,到一定量级的系统整个架构都会变成三层,客户端包括WEB、安卓和IOS,这里就不说了。接着还都会有一个接口层, 有三个主要作用: 第一个作用,要做 安全隔离,因为前端节点都是直接和用户交互,需要防范各种恶意攻击; 第二个还充当着一个 流量控制的作用,大家知道,在2014年春节的时候,微信红包,每分钟8亿多次的请求,其实真正到它后台的请求量,只有十万左右的数量级(这里的数据可能不准),剩余的流量在接口层就被挡住了; 第三,我们看对 PC 端和移 动 端的需求不一样的,所以我们可以进行拆分。接口层之后是后台,可以看到微博后台有三大块: 一个是 平台服 务, 第二, 搜索, 第三, 大数据。到了后台的各种服务其实都是处理的数据。 像平台的业务部门,做的就是 数据存储和读 取,对搜索来说做的是 数据的 检 索,对大数据来说是做的数据的 挖掘。微博其实和淘宝是很类似 微博其实和淘宝是很类似的。一般来说,第一代架构,基本上能支撑到用户到 百万 级别,到第二代架构基本能支撑到 千万 级别都没什么问题,当业务规模到 亿级别时,需要第三代的架构。 从 LAMP 的架构到面向服 务 的架构,有几个地方是非常难的,首先不可能在第一代基础上通过简单的修修补补满足用户量快速增长的,同时线上业务又不能停, 这是我们常说的 在 飞 机上 换 引擎的 问题。前两天我有一个朋友问我,说他在内部推行服务化的时候,把一个模块服务化做完了,其他部门就是不接。我建议在做服务化的时候,首先更多是偏向业务的梳理,同时要找准一个很好的切入点,既有架构和服务化上的提升,业务方也要有收益,比如提升性能或者降低维护成本同时升级过程要平滑,建议开始从原子化服务切入,比如基础的用户服务, 基础的短消息服务,基础的推送服务。 第二,就是可 以做无状 态 服 务,后面会详细讲,还有数据量大了后需要做数据Sharding,后面会将。 第三代 架构 要解决的 问题,就是用户量和业务趋于稳步增加(相对爆发期的指数级增长),更多考虑技术框架的稳定性, 提升系统整体的性能,降低成本,还有对整个系统监控的完善和升级。 大型网站的系统架构是如何演变的 我们通过通过数据看一下它的挑战,PV是在10亿级别,QPS在百万,数据量在千亿级别。我们可用性,就是SLA要求4个9,接口响应最多不能超过150毫秒,线上所有的故障必须得在5分钟内解决完。如果说5分钟没处理呢?那会影响你年终的绩效考核。2015年微博DAU已经过亿。我们系统有上百个微服务,每周会有两次的常规上线和不限次数的紧急上线。我们的挑战都一样,就是数据量,bigger and bigger,用户体验是faster and faster,业务是more and more。互联网业务更多是产品体验驱动, 技 术 在 产 品 体验上最有效的贡献 , 就是你的性能 越来越好 。 每次降低加载一个页面的时间,都可以间接的降低这个页面上用户的流失率。微博的技术挑战和正交分解法解析架构 下面看一下 第三代的 架构 图 以及 我 们 怎么用正交分解法 阐 述。 我们可以看到我们从两个维度,横轴和纵轴可以看到。 一个 维 度 是 水平的 分层 拆分,第二从垂直的维度会做拆分。水平的维度从接口层、到服务层到数据存储层。垂直怎么拆分,会用业务架构、技术架构、监控平台、服务治理等等来处理。我相信到第二代的时候很多架构已经有了业务架构和技术架构的拆分。我们看一下, 接口层有feed、用户关系、通讯接口;服务层,SOA里有基层服务、原子服务和组合服务,在微博我们只有原子服务和组合服务。原子服务不依赖于任何其他服务,组合服务由几个原子服务和自己的业务逻辑构建而成 ,资源层负责海量数据的存储(后面例子会详细讲)。技 术框架解决 独立于 业务 的海量高并发场景下的技术难题,由众多的技术组件共同构建而成 。在接口层,微博使用JERSY框架,帮助你做参数的解析,参数的验证,序列化和反序列化;资源层,主要是缓存、DB相关的各类组件,比如Cache组件和对象库组件。监 控平台和服 务 治理 , 完成系统服务的像素级监控,对分布式系统做提前诊断、预警以及治理。包含了SLA规则的制定、服务监控、服务调用链监控、流量监控、错误异常监控、线上灰度发布上线系统、线上扩容缩容调度系统等。 下面我们讲一下常见的设计原则。 第一个,首先是系统架构三个利器: 一个, 我 们 RPC 服 务组 件 (这里不讲了), 第二个,我们 消息中 间 件 。消息中间件起的作用:可以把两个模块之间的交互异步化,其次可以把不均匀请求流量输出为匀速的输出流量,所以说消息中间件 异步化 解耦 和流量削峰的利器。 第三个是配置管理,它是 代码级灰度发布以及 保障系统降级的利器。 第二个 , 无状态 , 接口 层 最重要的就是无状 态。我们在电商网站购物,在这个过程中很多情况下是有状态的,比如我浏览了哪些商品,为什么大家又常说接口层是无状态的,其实我们把状态从接口层剥离到了数据层。像用户在电商网站购物,选了几件商品,到了哪一步,接口无状态后,状态要么放在缓存中,要么放在数据库中, 其 实 它并不是没有状 态 , 只是在 这 个 过 程中我 们 要把一些有状 态 的 东 西抽离出来 到了数据层。 第三个, 数据 层 比服 务层 更需要 设计,这是一条非常重要的经验。对于服务层来说,可以拿PHP写,明天你可以拿JAVA来写,但是如果你的数据结构开始设计不合理,将来数据结构的改变会花费你数倍的代价,老的数据格式向新的数据格式迁移会让你痛不欲生,既有工作量上的,又有数据迁移跨越的时间周期,有一些甚至需要半年以上。 第四,物理结构与逻辑结构的映射,上一张图看到两个维度切成十二个区间,每个区间代表一个技术领域,这个可以看做我们的逻辑结构。另外,不论后台还是应用层的开发团队,一般都会分几个垂直的业务组加上一个基础技术架构组,这就是从物理组织架构到逻辑的技术架构的完美的映射,精细化团队分工,有利于提高沟通协作的效率 。 第五, www .sanhao.com 的访问过程,我们这个架构图里没有涉及到的,举个例子,比如当你在浏览器输入www.sanhao网址的时候,这个请求在接口层之前发生了什么?首先会查看你本机DNS以及DNS服务,查找域名对应的IP地址,然后发送HTTP请求过去。这个请求首先会到前端的VIP地址(公网服务IP地址),VIP之后还要经过负载均衡器(Nginx服务器),之后才到你的应用接口层。在接口层之前发生了这么多事,可能有用户报一个问题的时候,你通过在接口层查日志根本发现不了问题,原因就是问题可能发生在到达接口层之前了。 第六,我们说分布式系统,它最终的瓶颈会落在哪里呢?前端时间有一个网友跟我讨论的时候,说他们的系统遇到了一个瓶颈, 查遍了CPU,内存,网络,存储,都没有问题。我说你再查一遍,因为最终你不论用上千台服务器还是上万台服务器,最终系统出瓶颈的一定会落在某一台机(可能是叶子节点也可能是核心的节点),一定落在CPU、内存、存储和网络上,最后查出来问题出在一台服务器的网卡带宽上。微博多级双机房缓存架构 接下来我们看一下微博的Feed多级缓存。我们做业务的时候,经常很少做业务分析,技术大会上的分享又都偏向技术架构。其实大家更多的日常工作是需要花费更多时间在业务优化上。这张图是统计微博的信息流前几页的访问比例,像前三页占了97%,在做缓存设计的时候,我们最多只存最近的M条数据。 这里强调的就是做系统设计 要基于用 户 的 场 景 , 越细致越好 。举了一个例子,大家都会用电商,电商在双十一会做全国范围内的活动,他们做设计的时候也会考虑场景的,一个就是购物车,我曾经跟相关开发讨论过,购物车是在双十一之前用户的访问量非常大,就是不停地往里加商品。在真正到双十一那天他不会往购物车加东西了,但是他会频繁的浏览购物车。针对这个场景,活动之前重点设计优化购物车的写场景, 活动开始后优化购物车的读场景。 你看到的微博是由哪些部分聚合而成的呢?最右边的是Feed,就是微博所有关注的人,他们的微博所组成的。微博我们会按照时间顺序把所有关注人的顺序做一个排序。随着业务的发展,除了跟时间序相关的微博还有非时间序的微博,就是会有广告的要求,增加一些广告,还有粉丝头条,就是拿钱买的,热门微博,都会插在其中。分发控制,就是说和一些推荐相关的,我推荐一些相关的好友的微博,我推荐一些你可能没有读过的微博,我推荐一些其他类型的微博。 当然对非时序的微博和分发控制微博,实际会起多个并行的程序来读取,最后同步做统一的聚合。这里稍微分享一下, 从SNS社交领域来看,国内现在做的比较好的三个信息流: 微博 是 基于弱关系的媒体信息流 ; 朋友圈是基于 强 关系的信息流 ; 另外一个做的比 较 好的就是今日 头 条 , 它并不是基于关系来构建信息流 , 而是基于 兴趣和相关性的个性化推荐 信息流 。 信息流的聚合,体现在很多很多的产品之中,除了SNS,电商里也有信息流的聚合的影子。比如搜索一个商品后出来的列表页,它的信息流基本由几部分组成:第一,打广告的;第二个,做一些推荐,热门的商品,其次,才是关键字相关的搜索结果。 信息流 开始的时候 很 简单 , 但是到后期会 发现 , 你的 这 个流 如何做控制分发 , 非常复杂, 微博在最近一两年一直在做 这样 的工作。刚才我们是从业务上分析,那么技术上怎么解决高并发,高性能的问题?微博访问量很大的时候,底层存储是用MySQL数据库,当然也会有其他的。对于查询请求量大的时候,大家知道一定有缓存,可以复用可重用的计算结果。可以看到,发一条微博,我有很多粉丝,他们都会来看我发的内容,所以 微博是最适合使用 缓 存 的系统,微博的读写比例基本在几十比一。微博使用了 双 层缓 存,上面是L1,每个L1上都是一组(包含4-6台机器),左边的框相当于一个机房,右边又是一个机房。在这个系统中L1缓存所起的作用是什么? 首先,L1 缓 存增加整个系 统 的 QPS, 其次 以低成本灵活扩容的方式 增加 系统 的 带宽 。想象一个极端场景,只有一篇博文,但是它的访问量无限增长,其实我们不需要影响L2缓存,因为它的内容存储的量小,但它就是访问量大。这种场景下,你就需要使用L1来扩容提升QPS和带宽瓶颈。另外一个场景,就是L2级缓存发生作用,比如我有一千万个用户,去访问的是一百万个用户的微博 ,这个时候,他不只是说你的吞吐量和访问带宽,就是你要缓存的博文的内容也很多了,这个时候你要考虑缓存的容量, 第二 级缓 存更多的是从容量上来 规划,保证请求以较小的比例 穿透到 后端的 数据 库 中 ,根据你的用户模型你可以估出来,到底有百分之多少的请求不能穿透到DB, 评估这个容量之后,才能更好的评估DB需要多少库,需要承担多大的访问的压力。另外,我们看双机房的话,左边一个,右边一个。 两个机房是互 为 主 备 , 或者互 为热备 。如果两个用户在不同地域,他们访问两个不同机房的时候,假设用户从IDC1过来,因为就近原理,他会访问L1,没有的话才会跑到Master,当在IDC1没找到的时候才会跑到IDC2来找。同时有用户从IDC2访问,也会有请求从L1和Master返回或者到IDC1去查找。 IDC1 和 IDC2 ,两个机房都有全量的用户数据,同时在线提供服务,但是缓存查询又遵循最近访问原理。还有哪些多级缓存的例子呢?CDN是典型的多级缓存。CDN在国内各个地区做了很多节点,比如在杭州市部署一个节点时,在机房里肯定不止一台机器,那么对于一个地区来说,只有几台服务器到源站回源,其他节点都到这几台服务器回源即可,这么看CDN至少也有两级。Local Cache+ 分布式 缓 存,这也是常见的一种策略。有一种场景,分布式缓存并不适用, 比如 单 点 资 源 的爆发性峰值流量,这个时候使用Local Cache + 分布式缓存,Local Cache 在 应用 服 务 器 上用很小的 内存资源 挡住少量的 极端峰值流量,长尾的流量仍然访问分布式缓存,这样的Hybrid缓存架构通过复用众多的应用服务器节点,降低了系统的整体成本。 我们来看一下 Feed 的存 储 架构,微博的博文主要存在MySQL中。首先来看内容表,这个比较简单,每条内容一个索引,每天建一张表,其次看索引表,一共建了两级索引。首先想象一下用户场景,大部分用户刷微博的时候,看的是他关注所有人的微博,然后按时间来排序。仔细分析发现在这个场景下, 跟一个用户的自己的相关性很小了。所以在一级索引的时候会先根据关注的用户,取他们的前条微博ID,然后聚合排序。我们在做哈希(分库分表)的时候,同时考虑了按照UID哈希和按照时间维度。很业务和时间相关性很高的,今天的热点新闻,明天就没热度了,数据的冷热非常明显,这种场景就需要按照时间维度做分表,首先冷热数据做了分离(可以对冷热数据采用不同的存储方案来降低成本),其次, 很容止控制我数据库表的爆炸。像微博如果只按照用户维度区分,那么这个用户所有数据都在一张表里,这张表就是无限增长的,时间长了查询会越来越慢。二级索引,是我们里面一个比较特殊的场景,就是我要快速找到这个人所要发布的某一时段的微博时,通过二级索引快速定位。 分布式服务追踪系统 分布式追踪服务系统,当系统到千万级以后的时候,越来越庞杂,所解决的问题更偏向稳定性,性能和监控。刚才说用户只要有一个请求过来,你可以依赖你的服务RPC1、RPC2,你会发现RPC2又依赖RPC3、RPC4。分布式服务的时候一个痛点,就是说一个请求从用户过来之后,在后台不同的机器之间不停的调用并返回。 当你发现一个问题的时候,这些日志落在不同的机器上,你也不知道问题到底出在哪儿,各个服务之间互相隔离,互相之间没有建立关联。所以导致排查问题基本没有任何手段,就是出了问题没法儿解决。 我们要解决的问题,我们刚才说日志互相隔离,我们就要把它建立联系。建立联系我们就有一个请求ID,然后结合RPC框架, 服务治理功能。假设请求从客户端过来,其中包含一个ID 101,到服务A时仍然带有ID 101,然后调用RPC1的时候也会标识这是101 ,所以需要 一个唯一的 请求 ID 标识 递归迭代的传递到每一个 相关 节点。第二个,你做的时候,你不能说每个地方都加,对业务系统来说需要一个框架来完成这个工作, 这 个框架要 对业务 系 统 是最低侵入原 则 , 用 JAVA 的 话 就可以用 AOP,要做到零侵入的原则,就是对所有相关的中间件打点,从接口层组件(HTTP Client、HTTP Server)至到服务层组件(RPC Client、RPC Server),还有数据访问中间件的,这样业务系统只需要少量的配置信息就可以实现全链路监控 。为什么要用日志?服务化以后,每个服务可以用不同的开发语言, 考虑多种开发语言的兼容性 , 内部定 义标 准化的日志 是唯一且有效的办法。最后,如何构建基于GPS导航的路况监控?我们刚才讲分布式服务追踪。分布式服务追踪能解决的问题, 如果 单一用 户发现问题 后 , 可以通 过请 求 ID 快速找到 发 生 问题 的 节 点在什么,但是并没有解决如何发现问题。我们看现实中比较容易理解的道路监控,每辆车有GPS定位,我想看北京哪儿拥堵的时候,怎么做? 第一个 , 你肯定要知道每个 车 在什么位置,它走到哪儿了。其实可以说每个车上只要有一个标识,加上每一次流动的信息,就可以看到每个车流的位置和方向。 其次如何做 监 控和 报 警,我们怎么能了解道路的流量状况和负载,并及时报警。我们要定义这条街道多宽多高,单位时间可以通行多少辆车,这就是道路的容量。有了道路容量,再有道路的实时流量,我们就可以基于实习路况做预警? 对应于 分布式系 统 的话如何构建? 第一 , 你要 定义 每个服 务节 点它的 SLA A 是多少 ?SLA可以从系统的CPU占用率、内存占用率、磁盘占用率、QPS请求数等来定义,相当于定义系统的容量。 第二个 , 统计 线 上 动态 的流量,你要知道服务的平均QPS、最低QPS和最大QPS,有了流量和容量,就可以对系统做全面的监控和报警。 刚才讲的是理论,实际情况肯定比这个复杂。微博在春节的时候做许多活动,必须保障系统稳定,理论上你只要定义容量和流量就可以。但实际远远不行,为什么?有技术的因素,有人为的因素,因为不同的开发定义的流量和容量指标有主观性,很难全局量化标准,所以真正流量来了以后,你预先评估的系统瓶颈往往不正确。实际中我们在春节前主要采取了三个措施:第一,最简单的就是有降 级 的 预 案,流量超过系统容量后,先把哪些功能砍掉,需要有明确的优先级 。第二个, 线上全链路压测,就是把现在的流量放大到我们平常流量的五倍甚至十倍(比如下线一半的服务器,缩容而不是扩容),看看系统瓶颈最先发生在哪里。我们之前有一些例子,推测系统数据库会先出现瓶颈,但是实测发现是前端的程序先遇到瓶颈。第三,搭建在线 Docker 集群 , 所有业务共享备用的 Docker集群资源,这样可以极大的避免每个业务都预留资源,但是实际上流量没有增长造成的浪费。 总结 接下来说的是如何不停的学习和提升,这里以Java语言为例,首先, 一定要 理解 JAVA;第二步,JAVA完了以后,一定要 理 解 JVM;其次,还要 理解 操作系统;再次还是要了解一下 Design Pattern,这将告诉你怎么把过去的经验抽象沉淀供将来借鉴;还要学习 TCP/IP、 分布式系 统、数据结构和算法。

hiekay 2019-12-02 01:39:25 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站