香港旅游发展局对于保障消费者利益十分重视,为确保 " 优质旅游服务 " 计划认证商户在服务素质方面有一定保证,在审核新商户认证方面,香港旅游发展局采用第三方独立机构,以明访加上暗访的评审形式对商家产品质量,服务品质及售后服务等范畴进行考察,力求公平公正,实至名归.此外,对于已获认证商户,香港旅游发展局每年仍会进行评审,务求让认证商户的服务水平得已继续维持.如果商家遭到投诉或者提供不符合标准的服务,香港旅游发展局会透过第三方独立机构进行调查,并根据调查结果提供适当的跟进及协调工作.截至 2017 年 4 月, " 优质旅游服务 " 计划已经有接近 1外汇平台隔夜利息对比 优质 300 家认证商户,逾 8000 间分店获准加入,主要囊括了以下几个领域:
香港 " 优质旅游服务协会 " 旗下零售和餐饮业代表们为回归献礼.从左到右分别是莎莎国际控股有限公司主席及行政总裁郭少明博士(左一),百成堂集团主席李应生太平绅士(左二),太兴饮食集团主席陈永安先生(中),周生生集团国际有限公司京津区业务副总经理董鹏先生(右二),奇华饼家华东及华北区区域经理温咏欣小姐(右一)(图片来源:香港旅游发展局)
医院护理部闫主任从医疗,护理,生活,安全四个方面将医院近期开展的工作进行了简短汇报,她指出,通过近期多次的优质服务培训,医院提出的 "服务没有最好,只有更好" 的服务理念深深印在全院员工的脑海里.增强医护人员工作责任心,转变服务理念,重视安全管理.今后我院将继续强化医疗质控,提高医疗质量,运用信息化手段,不断优化医疗服务流程,着力解决患者反映的问题,真正做到让群众满意,从服务态度,服务质量,技术水平,医德医风,环境设施等方面进一步加大优化力度,为延安的医疗卫生事业作出一定的榜样.
采用高性能的web服务器可以极大提升推荐服务的性能,推荐服务业务逻辑相对简单,可以采用轻量级的web服务器,比如Vert.x(基于java语言的高性能web服务器),Spray(基于Scala语言的高性能web服务器),gin(基于Go语言的高性能web服务器),cowboy(基于Erlang语言的高性能web服务器)等,这样不仅可以满足开发推荐接口的需求,开发速度快,并且性能也很好.传统的web服务器如Tomcat等太重了,不太适合推荐api接口的开发.
一般来说内存的访问速度比磁盘快好几个数量级 采用基于内存的数据库来存储推荐结果会提升整个接口获取推荐结果的速度,现在有很多开源的这类数据库可供我们选择,比如Redis,CouchBase等.
具体做法可以是提供一组默认推荐接口,前端在启动时加载该接口,将数据存储在终端,当推荐服务无响应或者响应超时时,可以用默认推荐结果顶替.默认推荐虽然推荐的标的物没有原来的精准,但是不至于"开天窗",对用户体验也算是一个不错的补救措施.
多可用区(多活)
构建多可用区需要投入非常多的资源 成本较大 对于初创公司建议不要考虑采用这种方式.
有了自动监控,当服务出问题或者挂掉后,可以通过监控脚本自动将服务拉起.一般来说,重启可以解决80%的故障问题.
在极端情况下,当接口并发请求太大时(比如今年的春晚百度红包) 可以对访问请求做限制,让部分请求立即执行,其他请求在队列中等待.同时可以对同一IP的多次请求(可能是正常请求,也可能是恶意攻击)做限制,减缓对接口的冲击.还可以限制并发数,网络连接数,网络流量,CPU负载等各种限制措施来对访问进行控制.
熔断可以类比为电表的保险丝,当电流过大时(家里太多电器同时用或者短路)保险丝熔断,停止供电,避免出现意外事故.当请求推荐的服务有大量超时,这时新来的请求无法获得响应,只会无谓的消耗系统资源,这时整个服务可能出现了异常,熔断是较好的策略.
所谓降级,就是当服务不可用(比如熔断后)时,采用效果更差的服务替代,虽然效果没那么好,但是至少比什么都没有强.上面提到的接口层保护就是一种降级策略.
基于上面的说明,这非常适合用现在的NoSQL数据库做推荐结果存储,现在很多NoSQL数据支持Json等复杂的数据格式,并且具备横向扩容的能力.如常用的Redis,就支持String,Hash,List,Set,Sorted_Set等多种数据格式.
接口web服务最好做到无状态,这样就方便做横向扩展.在我们公司实践中,我们用Go语言的Beego框架和Gin框架来开发推荐接口,开发效率高,稳定,并且性能相当不错,目前Go的生态圈非常完善,是一个不错的选择.
推荐服务的可伸缩性要求我们可以非常容易地在负载高的时候做服务的扩容,结合现在的Docker容器技术及K8S编排系统及对接口服务的监控,制定一些伸缩的规则是可以做到自动伸缩的,当负载高时自动扩容服务器,当负载低时自动缩容.
这样的好处是减少人工干预的时间 及时伸缩也能更好的节省开支 让资源得到充分利用.当然,要想基于开源技术自己构建一套好用稳定的可自动伸缩的服务体系还是很有挑战的,幸好现在很多云计算厂商可以直接提供基于k8s,docker的云服务,让构建这样一套系统变得容易起来.
在上面图1 我们通过一个Kafka管道的模块来将推荐算法平台与推荐数据存储解耦合,而不是在推荐系统推断阶段直接将推荐结果插入推荐数据库.这样做的好处是减少系统依赖,便于问题排查.同时Kafka起到了对大规模推荐数据做备份和缓冲的作用.
我们可以简单将推荐系统分为三层,接口服务层处理用户的请求,数据层存储用户的推荐结果,算法模型层构建推荐模型并为用户生成推荐结果(见下面图6).通过分层,让整个系统更有层次感,更易于理解,升级,维护,也更方便排查问题.
基于推荐系统可容错的特性及CAP理论(指的是在一个分布式系统中,Consistency(一致性), Availability(可用性),Partition tolerance(分区容错性),三者不可兼得),推荐服务对一致性的要求也没有这么高,对于推荐系统选择的分布式存储数据库,不需要强一致性,往往达到最终一致性就足够了,但是我们最好需要保证系统是满足可用性的,这样才可以时时刻刻为用户提供推荐服务.