• 关于

    用户接口系统如何搭建

    的搜索结果

问题

云服务器ECS如何与企业内网系统做接口(信息传递)

helloqidi 2019-12-01 22:09:20 5107 浏览量 回答数 1

问题

【精品问答】OpenAPI服务列表

问问小秘 2020-04-24 17:11:14 11 浏览量 回答数 1

问题

如何在Windows 2008 R2 ECS上配置VPN NAT服务器为其它内网ECS提供公网访问

boxti 2019-12-01 21:29:54 2403 浏览量 回答数 0

万券齐发助力企业上云,爆款产品低至2.2折起!

限量神券最高减1000,抢完即止!云服务器ECS新用户首购低至0.95折!

问题

如何快速搭建钉钉微应用?

仟与仟寻 2019-12-01 22:02:34 2448 浏览量 回答数 1

问题

如何搭建监控系统?

轩墨 2019-12-01 21:58:48 1241 浏览量 回答数 0

问题

云服务器ECS

黄一刀 2020-04-04 04:10:42 856 浏览量 回答数 1

问题

【精品问答】资源管理

问问小秘 2020-04-24 17:58:23 3 浏览量 回答数 1

问题

函数计算

黄一刀 2020-04-04 03:07:45 80 浏览量 回答数 1

回答

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(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

问题

【大数据实践】日交易笔百万级Ping++的大数据平台架构解析

福利达人 2019-12-01 21:17:02 2801 浏览量 回答数 0

问题

Java-SDK之如何实现图片处理(一)?

青衫无名 2019-12-01 21:40:35 1239 浏览量 回答数 0

问题

OSS新手视频教程!

聚小编 2019-12-01 21:04:47 52192 浏览量 回答数 21

问题

JavaScript-SDK之如何实现图片处理(一)?

青衫无名 2019-12-01 21:44:36 1207 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 37578 浏览量 回答数 11

回答

 TTS</B>是Text To Speech的缩写,即“从文本到语音”。它是同时运用语言学和心理学的杰出之作,在内置芯片的支持之下,通过神经网络的设计,把文字智能地转化为自然语音流。TTS技术对文本文件进行实时转换,转换时间之短可以秒计算。在其特有智能语音控制器作用下,文本输出的语音音律流畅,使得听者在听取信息时感觉自然,毫无机器语音输出的冷漠与生涩感。TTS语音合成技术即将覆盖国标一、二级汉字,具有英文接口,自动识别中、英文,支持中英文混读。所有声音采用真人普通话为标准发音,实现了120-150个汉字/秒的快速语音合成,朗读速度达3-4个汉字/秒,使用户可以听到清晰悦耳的音质和连贯流畅的语调。现在有少部分MP3随身听具有了TTS功能。   TTS是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。TTS可以帮助有视觉障碍的人阅读计算机上的信息,或者只是简单的用来增加文本文档的可读性。现在的TTL应用包括语音驱动的邮件以及声音敏感系统。TTS经常与声音识别程序一起使用。现在有很多TTS的产品,包括Read Please 2000, Proverbe Speech Unit,以及Next Up Technology的TextAloud。朗讯、 Elan、以及 AT&T都有自己的语音合成产品。   除了TTS软件之外,很多商家还提供硬件产品,其中包括以色列WizCom Technologies公司的 Quick Link Pen,它是一个笔状的可以扫描也可以阅读文字的设备;还有Ostrich Software公司的Road Runner,一个手持的可以阅读ASCII文本的设备;另外还有美国DEC公司的DecTalk TTS,它是可以替代声卡的外部硬件设备,它包含一个内部软件设备,可以与个人电脑自己的声卡协同工作。 TTS文语转换用途很广,包括电子邮件的阅读、IVR系统的语音提示等等,目前IVR系统已广泛应用于各个行业(如电信、交通运输等)。   TTS所用的关键技术就是语音合成(SpeechSynthesis)。早期的TTS一般采用专用的芯片实现,如德州仪器公司的TMS50C10/TMS50C57、飞利浦的PH84H36等,但主要用在家用电器或儿童玩具中。   而基于微机应用的TTS一般用纯软件实现,主要包括以下几部分:   ●文本分析-对输入文本进行语言学分析,逐句进行词汇的、语法的和语义的分析,以确定句子的低层结构和每个字的音素的组成,包括文本的断句、字词切分、多音字的处理、数字的处理、缩略语的处理等。   ●语音合成-把处理好的文本所对应的单字或短语从语音合成库中提取,把语言学描述转化成言语波形。   ●韵律处理-合成音质(Qualityof Synthetic Speech)是指语音合成系统所输出的语音的质量,一般从清晰度(或可懂度)、自然度和连贯性等方面进行主观评价。清晰度是正确听辨有意义词语的百分率;自然度用来评价合成语音音质是否接近人说话的声音,合成词语的语调是否自然; 连贯性用来评价合成语句是否流畅。   要合成出高质量的语音,所采用的算法是极为复杂的,因此对机器的要求也非常高。算法的复杂度决定了目前微机并发进行多通道TTS的系统容量。 在一般的CTI应用系统中,都会有IVR(交互式语音应答系统)。IVR系统是呼叫中心的重要组成部分,通过IVR系统,用户可以利用音频按健电话输入信息,从系统中获得预先录制的数字或合成语音信息。具有TTS功能的IVR可以加快服务速度,节约服务成本,使IVR为呼叫者提供7*24小时的服务。   目前常见的IVR系统大都是通用的工控机平台上插入语音板卡组成,并支持中文语音合成TTS等技术。   一个典型的包含TTS服务的电话服务流程可分为:   用户电话拨入,系统IVR响应,获得用户按键等信息。   IVR根据用户的按键信息,向数据库服务器申请相关数据。   数据库服务器返回文本数据给IVR。   IVR通过其TCP通讯接口,将需要合成的文本信息发送给TTS服务器。   TTS服务器将用户文本合成的语音数据分段通过TCP通讯接口发送给IVR服务器。   IVR服务器把分段语音数据组装成为独立的语音文件。   IVR播放相应的语音文件给电话用户。   一般的公网接入(IVR)大都采用工控机+语音板卡,而合成的语音数据则通过局域网传给IVR。这种结构只适用于简单的应用场合。 包括中文语音处理和语音合成,利用中文韵律等相关知识对中文语句进行分词、词性判断、注音、数字符号转换,语音合成通过查询中文语音库得到语音。目前中文TTS系统,比较著名的有:IBM,Microsoft,Fujitsu,科大讯飞,捷通华声等研究的系统。目前比较关键的就是中文韵律处理、符号数字、多音字、构词方面有较多的问题,需要不断研究,使得中文语音合成的自然化程度较高。  CTI技术使电信和计算机相互融合,克服了传统电信和计算机服务相对单一的缺点,将两者完美结合了起来。其应用领域非常广泛,任何需要语音、数据通信,特别是那些希望把计算机网与通信网结合起来完成语音数据信息交换的系统都会用到CTI技术。   TTS即语音合成技术(Text To Speech),它涉及声学、语言学、数学信号处理技术、多媒体技术等多个学科技术,是中文信息处理领域的一项前沿技术,实现把计算机中任意出现的文字转换成自然流畅的语音输出。   TTS在CTI系统中可以应用在IVR(交互式语音应答)服务器上,以提供语音交互式平台,为用户电话来访提供语音提示,引导用户选择服务内容和输入电话事务所需的数据,并接受用户在电话拨号键盘上输入的信息,实现对计算机数据库等信息资料的交互式访问。   在IVR中应用TTS可以自动将文本信息转换为语音文件,或者实时地将文本信息合成语音并通过电话发布。实现文本与语音自动双向转换,以达到人与系统的自动交互,随时随地为客户服务。维护人员不必再人工录音,只须将电子文档引入系统中,系统可以自动将电子文档转换为语音信息播放给客户。数据库中存放的大量数据,无需事先进行录音,能够随时根据查询条件查出并合成语音进行播报,从而大大减少了座席人员的工作负担。   那么应如何将TTS功能附加到CTI应用中呢?某些比较先进的交换平台,已经在交换机的内部实现了TTS的功能,并作为标准接口的一部分对外提供,业务开发商只需要简单的调用他们即可以在业务中使用该功能。   对于未实现TTS功能的PBX,就需要业务开发商自己去选择合适的平台,在此基础上进行二次开发,即调用所选TTS平台提供的标准接口,实现语音合成功能。   目前CTI已经成为全球发展最为迅猛的产业之一,每年以50%的速度增长,CTI如同计算机产业一样是一个金字塔形的产业链,从上到下会以至少20倍的幅度增值。TTS作为一种诱人的新技术,如果能很好的嵌入到增值业务的应用中去,必将形成一个更好的应用前景。   杭州音通软件有限公司是由国家教育部和浙江省人民政府联办并依托浙江大学而成立的高新技术公司,音通公司主要致力于计算机语音技术的研发并逐步开拓语音识别、语音流媒体传输等其它语音领域的研究。其核心技术(Intone_TTS)是具有自主知识产权的中文语音合成技术,在由浙江省科技厅组织的鉴定中被专家一致鉴定为国内领先地位,并已申请多项国家专利。   Intone_TTS是一套把文本信息转换为语音信息的开发工具包,为系统集成商、软件开发商提供了完备的接口函数和编程示例,使用户能够灵活的进行调用,并集成到其它应用系统中。接口需要语音合成运行库的支持,适合多种开发环境。开发者可以根据具体的应用场合进行选择。   它能够对所有的汉字、英文、阿拉伯数字进行语音合成;   支持繁体字及多音字的编辑;   合成效果:自然、平滑;   规范的函数调用接口,同时支持微软SAPI的调用;支持同步调用和异步调用方式;   支持PCM Wave,uLaw/aLaw Wave,ADPCM,Dialogic Vox等多种语音格式;   支持GB2312码(简体中文)、BIG5码(繁体)、UNICODE码;   支持多路通道同时合成;   支持Dialogic、东进、三汇等主流语音板卡; TTS就是Text To Speech,文本转语音,文本朗读,差不多是一个意思。在语音系统开发中经常要用到。   目前市场上的TTS很多,实现方式也各式各样,有的很昂贵,如科大讯飞,据说当初得到863计划的资助,有很高的技术;有的相对便宜,如捷通华声, InfoTalk;也有免费的,如微软的TTS产品。   相对于ASR(Automatic Speech Recognition,自动语音识别)来说,实现一个TTS产品所需要的技术难度不算大,在我看来也就是个力气活。   要是让我们来做一个能够把汉语句子朗读出来的TTS,我们会怎么做呢?   有一种最简单的TTS,就是把每个字都念出来,你会问,岂不要录制6千多个汉字的语音?幸运的是,汉语的音节很少,很多同音字。我们最多只是需要录制: 声母数×韵母数×4,(其实不是每个读音都有4声),这样算来,最多只需要录制几百个语音就可以了。   在合成的时候需要一张汉字对应拼音的对照表,汉字拼音输入法也依赖这张表,可以在网上找到,不过通常没有4声音调,大不了自己加上,呵呵,要不怎么说是力气活呢。   这样做出来的TTS效果也还可以,特别是朗读一些没有特别含义的如姓名,家庭住址,股票代码等汉语句子,听起来足够清晰。这要归功于我们伟大的母语通常都是单音节,从古代的时候开始,每个汉字就有一个词,表达一个意思。而且汉字不同于英语,英语里面很多连读,音调节奏变化很大,汉字就简单多了。   当然,你仍然要处理一些细节,比如多音字,把“银行”读成“yin xing”就不对了;再比如,标点符号的处理,数字、字母的处理,这些问题对于写过很多程序的你,当然不难了。   国内的一些语音板卡带的TTS,不管是卖钱的还是免费的,大体都是这样做出来的,也就是这样的效果。   如果要把TTS的效果弄好一点,再来点力气活,把基本的词录制成语音,如常见的两字词,四字成语等,再做个词库和语音库的对照表,每次需要合成时到词库里面找。这样以词为单位,比以字为单位,效果自然是好多了。当然,这里面还是有个技术,就是分词的技术,要把复杂的句子断成合理的词序列,也有点技术。这也要怪新文化那些先驱们,当初倡导白话文,引进西文的横排格式、标点符号的时候,没有引进西文中的空格分词。不过即使分词算法那么不高效,不那么准确,也问题不大,如前面所说,汉字是单音节词,把声音合起来,大体上不会有错。   当然,科大讯飞的力气活又干的多了些,据说已经进化到以常用句子为单位来录音了,大家可以想像,这要耗费更多的力气,换来更好的效果。   至于增加一些衔接处的“词料”,弄一些修饰性的音调,我认为是无关紧要的,对整体的效果改进不是太大。   市面上商品化TTS一般还支持粤语,请个粤语播音员录音,把上面的力气活重做一遍就是了。   再说句题外话,很多人觉得录音最好找电台、电视台的播音员,其实找个你周围的女同事来录制,只要吐字清晰就可以了。在某种情况下,寻常声音比字正腔圆的新闻联播来得可爱。   再来说说文本的标识,对于复杂文本,某些内容程序没有办法处理,需要标识出来。比如,单纯的数字“128”,是应该念成“一百二十八”还是“一二八”?解决办法通常是加入XML标注,如微软的TTS:"<context ID = "number_cardinal">128</context>"念成“一百二十八”,"<context ID = "number_digit">128</context>"将念成“一二八”。TTS引擎可以去解释这些标注。遗憾的是,语音XML标注并没有形成大家都完全认可的标准,基本上是各自一套。   再说说TTS应用编程,微软的TTS编程接口叫SAPI,是COM接口,开发起来还是有点麻烦,还好MSDN的网站上资料很全面。微软的TTS虽然免费,但其中文角色目前是个男声,声音略嫌混浊,感觉不爽。   国内一般的厂家提供API调用接口,相对比较简单,可以方便地嵌入应用程序中去。   商品化的TTS还有个并发许可限制,就是限制同时合成的并发线程数,我觉得这个限制用处不大。无论哪种TTS,都可以将文本文件转换成语音文件,供语音卡播放。大部分应用句子比较短小,一般不会超过100个汉字,合成的时间是非常短的,弄个线程专门负责合成,其它应用向该线程请求就是了,万一句子很长,把它分解成多个短句子就是了,播放的速度总是比合成的速度慢。   也很多应用是脱机合成,没有实时性要求,就更不必买多个许可了。   更多情况下,我们甚至没有必要购买TTS,比如语音开发中常见的费用催缴,拨通后播放:“尊敬的客户,您本月的费用是:212元”,前面部分对所有客户都一样,录一个语音文件就是了,而数字的合成是很简单的,你只要录制好10个数字语音,再加上十,百,千,万,再加上金钱的单位“元”。   TTS(Training+Tool+Scheme)超越计划   针对目前成长型企业遇到的人力资源问题,立体化解决人力资源瓶颈、通过企业与专家共建、实现人才强企的人力资源方向的重大智业项目。为企业培养人力资源高级管理人才,提供先进人力资源管理工具,并协助企业建立现代人力资源战略规划。通过“培训(Training)+工具(Tool)+方案(Scheme)”的办法,为企业系统解决人力资源难点问题,进而搭建科学、完善的人力资源管理体系。   TTS TIANJIN TERMINAL SURCHARGE   天津港口附加费。09年从日韩经过的船所收的一个费用 答案来源网络,供参考,希望对您有帮助

问问小秘 2019-12-02 03:05:12 0 浏览量 回答数 0

问题

.NET-SDK之如何实现图片处理(一)?

青衫无名 2019-12-01 21:44:16 1310 浏览量 回答数 0

问题

如何获取TableStore HBase Client

云栖大讲堂 2019-12-01 20:56:44 1255 浏览量 回答数 0

问题

SDK及DEMO下载

nicenelly 2019-12-01 20:57:56 1162 浏览量 回答数 0

回答

当您拥有一台或多台DDH时,您可以在DDH上创建对应规格的ECS实例。 前提条件 在指定的DDH上创建ECS实例前,您必须先完成以下工作。 创建DDH。详细步骤,请参见创建DDH。 完成实名认证。 如果要创建按量付费ECS实例,账户余额不能少于100元人民币。充值详情,请参见如何充值付款。 在DDH所在地域里,搭建IPv4专有网络,详情请参见搭建IPv4专有网络。 如果不使用系统自动创建的默认安全组,必须在目标地域创建一个安全组并添加满足您业务需求的安全组规则。具体步骤,请参见创建安全组和添加安全组规则。 创建Linux实例时如果要绑定SSH密钥对,必须在目标地域创建一个SSH密钥对,详情请参见创建SSH密钥对。 如果要设置自定义数据,必须准备实例自定义数据,详情请参见实例自定义数据。 如果要让实例扮演某个角色,必须创建实例RAM角色并授权,详情请参见通过控制台使用实例 RAM 角色。 背景信息 在DDH上只能创建VPC类型ECS实例。DDH上的ECS实例与共享宿主机上ECS实例的功能差异,请参见ECS实例功能对比。 操作步骤 登录ECS管理控制台。 在左侧导航栏,单击实例与镜像 > 专有宿主机 DDH。 在顶部状态栏处,选择地域。 找到待创建ECS实例的DDH,在操作列,单击创建实例。 完成基础配置。 选择专有宿主机。 默认是您选中的DDH。您可以更换专有宿主机。 设置关联宿主机。 选中关联宿主机:已停机释放资源的实例再次启动时,依然会部署在当前DDH上。若当前DDH可用资源不足,则实例启动失败。 取消勾选关联宿主机:已停机释放资源的实例再次启动时,若当前DDH可用资源不足,则系统自动选择您账号下其他满足自动部署条件的DDH部署实例。更多详情,请参见关联宿主机功能介绍。 选择计费方式。 根据DDH的计费方式选择ECS实例的计费方式。您可以在包年包月DDH上创建包年包月或者按量付费的ECS实例。 说明 如果要创建按周付费的ECS实例,必须选择包年包月,并将页面底部的购买周期设置为1周。ECS实例各计费方式的区别,请参见计费对比。 确认地域。 ECS实例的地域及可用区与DDH相同。 选择实例规格并设置实例数量。 可供选择的实例规格由DDH的主机规格及剩余资源决定。宿主机规格详情,请参见宿主机规格。 选择镜像。 您可以选择公共镜像、自定义镜像、共享镜像或从镜像市场选择镜像。如何选择镜像,请参见选择镜像。 说明 如果您要使用SSH密钥对,必须选择Linux系统。 如果您要设置实例自定义数据,只能选择特定的镜像,详情请参见实例自定义数据支持的镜像。 选择存储。 系统盘(必选):用于安装操作系统。请指定系统盘的云盘类型和容量。 云盘类型:当前地域可供选择的所有云盘类型。 容量:系统盘默认容量为40GiB,最大为500GiB。如果选择的镜像文件大于40GiB,则默认为镜像文件大小。系统盘的容量范围由镜像决定,如下表所示。 操作系统 系统盘容量 Linux(不包括CoreOS)FreeBSD [max{20, 镜像文件大小}, 500]GiB CoreOS [max{30, 镜像文件大小}, 500]GiB Windows [max{40, 镜像文件大小}, 500]GiB 数据盘:若添加数据盘,必须选择云盘类型、容量、数量,并选择是否加密。您可以创建空云盘,也可以使用快照创建云盘。最多可以添加16块云盘作数据盘。 说明 此时创建的云盘有以下特点: 计费方式与实例相同。 包年包月数据盘只能随实例一起释放,按量付费的数据盘可以设置为随实例一起释放。 如果您选择的是带本地盘的实例规格族(比如i2),这里会显示实例规格对应的本地盘信息,不可配置。本地盘实例规格对应的本地盘信息,请参见实例规格族。 单击下一步:网络和安全组。 完成网络和安全组设置。 选择网络。 只能选择专有网络,并选择一个专有网络和交换机。如果您没有创建专有网络和交换机,可以使用默认专有网络和默认交换机。 设置公网带宽。 如果要为实例分配一个公网IP地址,必须选中分配公网IP地址,再选择按使用流量或按固定带宽 进行公网带宽计费,并指定带宽。通过这种方式分配的公网IP地址不能与实例解绑。关于如何选择公网带宽计费方式,请参见公网带宽计费。 如果您的实例不需要访问公网或者要使用弹性公网IP(EIP)地址访问公网,不能选择分配公网IP地址。 选择安全组。 所选安全组中的规则必须满足您的业务需求。 说明 如果您自己没有创建安全组,可以使用默认安全组。默认安全组的规则,请参见默认安全组规则。 添加弹性网卡。 如果所选实例规格支持弹性网卡,您可以添加弹性网卡,并为网卡选择交换机。 说明 这里添加的弹性网卡默认会随实例一起释放,您可以在ECS控制台或者使用DetachNetworkInterface接口分离实例和网卡。 单击下一步:系统配置。 可选: 完成系统配置。 选择并设置登录凭证。 您可以直接设置,也可以选择创建后设置。根据镜像的操作系统,选择登录凭证。 Linux系统:可以选择使用密钥对或密码作为登录凭证。 Windows系统:只能使用密码作为登录凭证。 设置实例名称及主机名。 设置高级选项。 实例RAM角色:为实例授予一个RAM角色。 实例自定义数据:自定义实例的启动行为或者向实例传入数据。 单击下一步:分组设置。 可选: 完成分组设置。 如果您有多台实例,为了方便管理,建议您为实例添加标签。 如果您是企业用户,已经开通了资源管理服务,而且已经创建了资源组,您可以按资源组管理实例。 确认订单并创建实例。 在所选配置区域,确认配置信息。 您可以单击图标重新编辑配置。 如果ECS实例计费方式为按量付费,可以设置自动释放服务时间。 如果ECS实例计费方式为包年包月,可以设置购买时长,并选择是否开启自动续费。 说明 包年包月ECS实例的购买时长终点不能晚于包年包月DDH计费时长的终点。 确认配置费用。这时显示的费用包括系统盘、数据盘(如果有)和公网带宽的费用。 阅读并确认云服务器ECS服务条款。 单击创建实例。 执行结果 实例创建后,单击管理控制台回到ECS管理控制台查看新建的ECS实例。在相应地域的实例列表中,您能查看新建实例的实例ID、公网IP地址、私有IP地址等信息。如果您已经设置了实例列表的自定义列表项,您还可以看到ECS实例的宿主机信息。 说明 设置自定义列表项的步骤,请参见在不同DDH之间迁移ECS实例。 后续步骤 您可以通过FTP服务上传本地文件到ECS实例。关于部署FTP服务的详细操作,请参见使用ECS实例创建FTP站点。 创建实例后,建议您对操作系统做安全合规性检查和加固: Linux实例,请参见Linux操作系统加固。 Windows实例,请参见Windows操作系统安全加固。 如果您随实例创建了数据盘,只有分区格式化后您才能正常使用数据盘,具体操作,请参见Linux格式化数据盘或Windows格式化数据盘。

1934890530796658 2020-03-30 15:00:18 0 浏览量 回答数 0

问题

中间件性能初赛关于windows环境下的一些文档汇总

玄弟 2019-12-01 21:45:14 10515 浏览量 回答数 4

问题

荆门开诊断证明-scc

游客5k2abgdj3m2ti 2019-12-01 22:09:00 1 浏览量 回答数 0

问题

如何实现CDN加速OSS?

青衫无名 2019-12-01 21:38:48 1387 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档访问控制移动终端是一个不受信任的环境。为此,SDK提供了两种依赖于您的业务Server的鉴权模式: STS鉴权模式 和 自签名模式 。 STS鉴权模式介绍OSS可以通过阿里云STS服务,临时进行授权访问。阿里云STS (Security Token Service) 是为云计算用户提供临时访问令牌的Web服务。通过STS,您可以为第三方应用或联邦用户(用户身份由您自己管理)颁发一个自定义时效和权限的访问凭证,App端称为FederationToken。第三方应用或联邦用户可以使用该访问凭证直接调用阿里云产品API,或者使用阿里云产品提供的SDK来访问云产品API。 您不需要透露您的长期密钥(AccessKey)给第三方应用,只需要生成一个访问令牌并将令牌交给第三方应用即可。这个令牌的访问权限及有效期限都可以由您自定义。您不需要关心权限撤销问题,访问令牌过期后就自动失效。 以APP应用为例,交互流程如下图: 方案的详细描述如下: App用户登录。App用户身份是您自己管理。您可以自定义身份管理系统,也可以使用外部Web账号或OpenID。对于每个有效的App用户来说,AppServer可以确切地定义出每个App用户的最小访问权限。AppServer请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,AppServer需要确定App用户的最小访问权限(用Policy语法描述)以及授权的过期时间。然后通过调用STS的AssumeRole(扮演角色)接口来获取安全令牌。角色管理与使用相关内容请参考RAM使用指南中的角色管理。STS返回给AppServer一个有效的访问凭证,App端称为FederationToken,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId, AccessKeySecret)以及过期时间。AppServer将FederationToken返回给ClientApp。ClientApp可以缓存这个凭证。当凭证失效时,ClientApp需要向AppServer申请新的有效访问凭证。比如,访问凭证有效期为1小时,那么ClientApp可以每30分钟向AppServer请求更新访问凭证。ClientApp使用本地缓存的FederationToken去请求Aliyun Service API。云服务会感知STS访问凭证,并会依赖STS服务来验证访问凭证,并正确响应用户请求。 STS安全令牌详情,请参考《RAM使用指南》中的角色管理。关键是调用STS服务接口AssumeRole来获取有效访问凭证即可。也可以直接使用STS SDK来调用该方法,点击查看。 使用这种模式授权需要先开通阿里云RAM服务。 STS使用手册:点击查看 OSS授权策略配置:点击查看 直接设置StsToken您可以在APP中,预先通过某种方式(如通过网络请求从您的业务Server上)获取一对StsToken,然后用它来初始化SDK。采取这种使用方式,您需要格外关注StsToken的过期时间,在StsToken即将过期时,需要您主动更新新的StsToken到SDK中。 初始化代码为: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>");OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 在您判断到Token即将过期时,您可以重新构造新的OSSClient,也可以通过如下方式更新CredentialProvider: oss.updateCredentialProvider(new OSSStsTokenCredentialProvider("<StsToken.AccessKeyId>", "<StsToken.SecretKeyId>", "<StsToken.SecurityToken>")); 实现获取StsToken回调如果您期望SDK能自动帮您管理Token的更新,那么,您需要告诉SDK如何获取Token。在SDK的应用中,您需要实现一个回调,这个回调通过您实现的方式去获取一个Federation Token(即StsToken),然后返回。SDK会利用这个Token来进行加签处理,并在需要更新时主动调用这个回调获取Token,如图示: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";OSSCredentialProvider credentialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { // 您需要在这里实现获取一个FederationToken,并构造成OSSFederationToken对象返回 // 如果因为某种原因获取失败,可直接返回nil OSSFederationToken * token; // 下面是一些获取token的代码,比如从您的server获取 ... return token; }};OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 此外,如果您已经通过别的方式拿到token所需的各个字段,也可以在这个回调中直接返回。如果这么做的话,您需要自己处理token的更新,更新后重新设置该OSSClient实例的OSSCredentialProvider。 使用示例: 假设您搭建的server地址为: http://localhost:8080/distribute-token.json ,并假设访问这个地址,返回的数据如下: { "StatusCode": 200, "AccessKeyId":"STS.iA645eTOXEqP3cg3VeHf", "AccessKeySecret":"rV3VQrpFQ4BsyHSAvi5NVLpPIVffDJv4LojUBZCf", "Expiration":"2015-11-03T09:52:59Z", "SecurityToken":"CAES7QIIARKAAZPlqaN9ILiQZPS+JDkS/GSZN45RLx4YS/p3OgaUC+oJl3XSlbJ7StKpQ...."}那么,您可以这么实现一个OSSFederationCredentialProvider实例: OSSCredentialProvider credetialProvider = new OSSFederationCredentialProvider() { @Override public OSSFederationToken getFederationToken() { try { URL stsUrl = new URL("http://localhost:8080/distribute-token.json"); HttpURLConnection conn = (HttpURLConnection) stsUrl.openConnection(); InputStream input = conn.getInputStream(); String jsonText = IOUtils.readStreamAsString(input, OSSConstants.DEFAULT_CHARSET_NAME); JSONObject jsonObjs = new JSONObject(jsonText); String ak = jsonObjs.getString("AccessKeyId"); String sk = jsonObjs.getString("AccessKeySecret"); String token = jsonObjs.getString("SecurityToken"); String expiration = jsonObjs.getString("Expiration"); return new OSSFederationToken(ak, sk, token, expiration); } catch (Exception e) { e.printStackTrace(); } return null; }}; 自签名模式您可以把AccessKeyId/AccessKeySecret保存在您的业务server,然后在SDK实现回调,将需要加签的合并好的签名串POST到server,您在业务server对这个串按照OSS规定的签名算法签名之后,返回给该回调函数,再由回调返回。 签名算法参考:点击查看 content是已经根据请求各个参数拼接后的字符串,所以算法为: signature = "OSS " + AccessKeyId + ":" + base64(hmac-sha1(AccessKeySecret, content))代码如下: String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";credentialProvider = new OSSCustomSignerCredentialProvider() { @Override public String signContent(String content) { // 您需要在这里依照OSS规定的签名算法,实现加签一串字符内容,并把得到的签名传拼接上AccessKeyId后返回 // 一般实现是,将字符内容post到您的业务服务器,然后返回签名 // 如果因为某种原因加签失败,描述error信息后,返回nil // 以下是用本地算法进行的演示 return "OSS " + AccessKeyId + ":" + base64(hmac-sha1(AccessKeySecret, content)); }};OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider); 特别注意: 无论是STS鉴权模式,还是自签名模式,您实现的回调函数,都需要保证调用时返回结果。所以,如果您在其中实现了向业务server获取token、signature的网络请求,建议调用网络库的同步接口。回调都是在SDK具体请求的时候,在请求的子线程中执行,所以不会阻塞主线程。

2019-12-01 23:14:04 0 浏览量 回答数 0

问题

安卓与iOS百问,开发者系统指南

yq传送门 2019-12-01 20:14:48 27317 浏览量 回答数 26

问题

做好软件测试需要具备的思维方式

技术小菜鸟 2019-12-01 21:25:46 2817 浏览量 回答数 1

回答

可信电子证照采用许可链作为区块链技术底层。许可链分为联盟链和私有链两种,为简单起见,本节将以私有链为例,讨论如何搭建并部署一条属于自己的以太坊私有链。 考虑到便捷性,我们提供私有链底层平台的部署脚本,基于该脚本可实现私有链的自动化快速部署。在环境准备方面,私有链平台部署在政府内网,区块链节点运行于若干PC Server,在IP层保证区块链节点间的互联互通。 □测试环境 :3台全节点服务器(虚拟机)。 □服务器系统:centos 6.8。 □服务器性能:4核,8GB内存。 □以太坊客户端:geth 搭建及部署以太坊私有链的具体步骤如下。 第一步:部署主节点,在该节点上生成创世区块。 首先,通过制定的参数配置,在控制台启动geth服务 过参数console启动一个带命令行的geth服务。接着,通过带有命令行的geth服务,注册一个新用户。 □personal.newAccount("test1234”):注册新用户的web3接口。 □0xfc3147e7d648b3513f3fbad853ddc242e7f003ba:注册成功后为新用户生成的地址address,对于以太坊来说也是公钥,记住这个地址,在配置创世节点的时候需要。 新用户创建成功后,输入命令 “exit” 退出服务,如果不退出,geth服务会自动同步公链区块,搭建私有链则不需要同步以太坊公链。 然后,通过创世节点配置配置文件(genesis.json),初始化创世节点。初始化配置文件内容如下: { "alloc": { }, "nonce": "0x0000000000000042”, //随机数,用于挖矿 "difficulty": "0x020000”, //设置区块挖矿复杂度,设置太高,产出区块的速度会比较慢,设置太低,产出垃圾区块(分叉)的概率会比较高 "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000”, // 与nonce一起配合用于挖矿,详细信息可以参考以太坊黄皮书 "coinbase": "0x0000000000000000000000000000000000000000”, // coninbase地址 "timestamp": "0x00”, //时间戳 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000”, //创世区块父区块的地址,由于是创世区块,没有父区块,所以为0 "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa”, //备注信息 "gasLimit": “0x4c4b40” // 设置gas的消耗总量限制,用于限制区块能包含交易的信息综合,这里我们用于私链测试开发,所以填最大值 } 获取创世节点配置文件的参数以后,通过命令来初始化创世节点: geth --datadir data init genesis.json 至此,创世节点的初始化就完成了,现在我们来启动创世节点: geth --datadir data --mine --etherbase 0 --minerthreads 2 --port 30303 --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10..129. --rpccorsdomain “*” console 运行上述命令后会看到图1-16所示的界面。 后面需要在从节点添加监听地址来同步主节点的区块。 我们的创世区块的主节点已经启动了。可以查看创世节点的一些信息 指令含义分析如下所示。 eth.accounts :查看当前geth服务下的账户列表; eth.getBalacne(“0xfc3147e7d648b3513f3fbad853ddc242e7f003ba”) :查询指定账户的余额信息,单位为wei。 至此,我们的创世节点已经成功启动了。 第二步:部署从节点,并且同步主节点的区块信息。 首先,把主节点服务上的genesis.json复制到从节点服务器,并初始化节点: geth --datadir data init genesis.json 然后,启动从节点geth服务: geth --datadir data console 从服务启动成功,服务启动后的显示信息与主服务的类似。 接着,在从服务器上创建账户,与主服务创建账户相同: personal.newAccount(?234test?; “0xabc147e7d648b3513f3fbad853ddc242e7f00gjs” 为了从服务添加对主服务的监听,在从服务的geth服务控制台输入如下命令: admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”); 此时主从服务就可以互相同步区块了。 添加创世节点的监听端口有如下3种方式。 (1)在geth服务控制台使用如下命令: admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”); (2)在geth启动参数设置,使用参数--bootbodes: “enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303” (3)使用配置文件,添加文件/static-nodes.json : [ "enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303", ] 最后我们要让主从服务的矿工工作了,目前该私有链的以太币只能依靠矿工挖矿来产出。分别在主从节点的geth控制台输入以下命令: personal.unlockAccount(“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs”); 分别在对应的服务器上填入对应的矿工用户地址,即刚注册的用户的地址。这时,控制台需要我们输入注册时地址对应的用户名(也就是注册新用户时设定的test1234)。 然后,使用miner.start(2) 命令开始挖矿,这里需要设置cpu使用的个数。之后可以使用miner.stop()命令来停止挖矿。 至此,我们已经搭建好两个全节点的区块链服务了。可以使用脚本来启动geth服务,而不需要在geth控制台中启动相关服务。 创建geth.sh脚本: geth --datadir /data/Ethereum/data --port 30303 --bootnodes "enode://b70d74575119486999877d08f07aa2e9cb4aa908 f78d3e58d91e19eb790a3723f8aedc25fd9823aa0e7cc2c4ca54c431ab785211cb111aa9c28461ca72adb67f@10.51.110.19:30303" --mine --minerthreads 2 --nat "extip:10.51.110.21" --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10.51.110.21 --rpc corsdomain “*” console 脚本启用服务以后,可以通过curl命令来调用geth服务的json-rpc接口(rpc服务的地址就是启动命令--rpcaddr设定的地址,服务端口默认为8545),例如: curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params": [“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs", "latest"],"id":1}’ 10.51.110.21:8545

问问小秘 2019-12-02 03:10:06 0 浏览量 回答数 0

回答

1.产品2.UI3.CSS4.JS5.后端(Java/php/python)6.DBA(mysql/oracle)7.运维(OP) 8.测试(QA)9.算法(分类/聚类/关系抽取/实体识别)10.搜索(Lucene/Solr/elasticSearch)11.大数据工程师(Hadoop)12.Android13.IOS14.运营 一.产品1 工作内容:了解用户需求,做竞品调研,画产品原型,写产品文档,讲解产品需求,测试产品Bug,收集用户反馈,苦练金刚罩以防止程序员拿刀砍。2 需要技能:PPT,Word, Axure,XP,MVP,行业知识,沟通。 二. UI1 工作内容:收到产品原型,给原型上色,偶尔会自作主张调整下原型的位置,出不同的风格给老板和客户选,然后听他们的意见给出一个自己极不喜欢的风格,最好给Android,IOS或者是CSS做好标注,还有的需要直接帮他们切好图,最后要练出来象素眼,看看这些不靠谱的程序员们有没有上错色或者是有偏差。2 需要技能:PS,Illustrator,Sketch,耐性,找素材。 三. CSS1 工作内容:产品设计好原型,UI做出来了效果图,剩下的就是CSS工程师用代码把静态文件写出来的。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【PS,域名,Html,Html5,CSS,CSS3】扩展【自适应,响应式,Bootstrap,Less,Flex】 四 .JS 1 工作内容:JS工程师其实分成两类,在之前讲CSS的时候已经提到过,一个是套页面的,一个是前后端分离的。对这两个概念还是分不太清的,可以回过头去看CSS的部分。 2 需要技能:环境【IDE(WEBStorm,Sublime,EditPlus),源码管理(SVN/Git) ,WEB服务器(nginx)】基础【Http,REST,跨域,语法,组件,F12,Json,Websocket】框架【JQuery,AngularJS,Bower,RequireJS,GruntJS,ReactJS,PhoneGap】业务【金融,教育,医疗,汽车,房产等等等等各种行业】 五 .后端(Java/python/go) 1 工作内容:大部分的后端工程师都停留在功能实现的层面上。这是现在国内二流或者是三流的公司的现状,甚至是在某些一流的公司。很多时候都是架构师出了架构设计,更多的外包公司根本就是有DBA来做设计,然后后端程序员从JS到CSS到Java全写,完全就是一个通道,所有的复杂逻辑全部交给DB来做,这也是几年前DBA很受重视的原因。 2 需要技能:环境【IDE(Idea/Eclipse,Maven,jenkins,Nexus,Jetty,Shell,Host),源码管理(SVN/Git) ,WEB服务器(nginx,tomcat,Resin)】基础【Http,REST,跨域,语法,Websocket,数据库,计算机网络,操作系统,算法,数据结构】框架【Spring,AOP,Quartz,Json TagLib,tiles,activeMQ,memcache,redis,mybatis,log4j,junit等等等等等】业务【金融,教育,医疗,汽车,房产等等等等各种行业】。 六 .DBA  1 工作内容:如果你做了一个DBA,基本上会遇到两种情况。一种是你的后端工程师懂架构,知道怎么合便使用DB,知道如何防止穿透DB,那么恭喜你,你只是需要当一个DB技术兜底的顾问就好,基本上没什么活可以做,做个监控,写个统计就好了。你可以花时间在MongoDB了,Hadoop了这些,随便玩玩儿。再按照我之前说的,做好数据备份。如果需求变动比较大,往往会牵涉到一些线上数据的更改,那么就在发布的时候安静的等着,等着他们出问题。。。。如果不出问题就可以回家睡觉了。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop】工具【各种DB的版本,工具,备份,日志等】。 七. 运维  1 工作内容:运维的工作大概分成几个部分,我对于修真院学习运维的少年们都这么说,大概是:A。基础环境的搭建和常用软件的安装和配置(兼网管的还有各种程控机),常用软件指的是SVN,Git,邮箱这种,更细节的内容请参考修真院对于运维职业的介绍。B。日常的发布和维护,如刚刚讲到的一样,测试环境和线上环境的发布和记录,原则上,对线上所有的变更都应该有记录。C。数据的备份和服务的监控&安全配置。各种数据,都要做好备份和回滚的手段,提前准备好各种紧急预案,服务的监制要做好。安全始终都是不怎么被重点考虑的问题,因为这个东西无底洞,你永远不知道做到什么程度算是比较安全了,所以大多数都是看着情况来。D。运维工具的编写。这一点在大的云服务器商里格外常见,大公司也是一样的。E。Hadoop相关的大数据体系架构的运维,确实有公司在用几百台机器做Hadoop,所以虽然不常见,我还是列出来吧。 2 需要技能:环境【Linux,Mysql,Oracle,MongoDB,Hadoop,nginx,apache,F5,lvs,vpn,iptable,svn,git,memcache,redis】工具【linux 常用工具,Mysql常用工具,Jenkins,zabbix,nagios】自动化运维【openstack,docker,ansible】语言【shell,python】 八 .QA  1 工作内容:QA需要了解需求,很多公司会要求QA写测试用例,我觉得是扯淡。完全是在浪费时间。通常开发三周,QA测试的时间只有一周到一周半。还有关于提前写测试用例的,都不靠谱。 2 需要技能:流程【Bug修复流程,版本发布流程】工具【禅道,BugZilla,Jira,Excel表格来统计Bug数,自动化测试】性格【严谨,耐心】 九. 算法工程师  1 工作内容:算法工程师的工作内容,大部分时间都是在调优。就是调各种参数和语料,寻找特征,验证结果,排除噪音。也会和Hadoop神马的打一些交道,mahout神马的,我那个时候还在用JavaML。现在并不知道有没有什么更好用的工具了。有的时候还要自己去标注语料---当然大部分人都不爱做这个事儿,会找漂亮的小编辑去做。2 需要技能:基础【机器学习,数据挖掘】工具【Mahout,JavaML等其他的算法工具集】 十. 搜索工程师  1 工作内容: 所以搜索现在其实分成两种。一种是传统的搜索。包括:A。抓取 B。解析C。去重D。处理E。索引F。查询另一种是做为架构的搜索。并不包括之前的抓取解析去重,只有索引和查询。A。索引B。查询 2 需要技能:环境【Linux】框架【Luence,Slor,ElasticSearch,Cassandra,MongoDB】算法【倒排索引,权重计算公式,去重算法,Facet搜索的原理,高亮算法,实时索引】 十一. 大数据工程师  1 工作内容:工作内容在前期会比较多一些,基础搭建还是一个挺讲究的事儿。系统搭建好之后呢,大概是两种,一种是向大数据部门提交任务,跑一圈给你。一种是持续的文本信息处理中增加新的处理模块,像我之前说的增加个分类啦,实体识别神马的。好吧第一种其实我也不记得是从哪得来的印象了,我是没有见到过的。架构稳定了之后,大数据部门的工作并不太多,常常会和算法工程师混到一起来。其他的应该就是大数据周边产品的开发工作了。再去解决一些Bug什么的。2 需要技能:环境【Linux】框架【Hadoo,spark,storm,pig,hive,mahout,zookeeper 】算法【mapreduce,hdfs,zookeeper】。 十二. Android工程师  1 工作内容:Android工程师的日常就是听产品经理讲需求,跟后端定接口,听QA反馈哪款机器不兼容,闹着申请各种测试机,以及悲催的用Android做IOS的控件。 2 需要技能:环境【Android Studio,Maven,Gradle】基础【数据结构,Java,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】 十三. IOS工程师  1 工作内容:IOS工程师的工作内容真的挺简单的,听需求,定接口。做个适配,抛弃一下iphone4。还有啥。。马丹,以我为数不多的IOS知识来讲,真的不知道还有啥了。我知道的比较复杂的系统也是各种背景高斯模糊,各种渐变,各种图片滤镜处理,其他并没有什么。支付,地图,统计这些东西。 嗯。2 需要技能:环境【Xcode】基础【数据结构,Object,计算机网络】组件【IM,地图,支付,拍照,视频,音频,统计,分享,手势密码】

行者武松 2019-12-02 01:21:45 0 浏览量 回答数 0

问题

Python-SDK 之如何实现图片处理?

青衫无名 2019-12-01 21:41:10 1354 浏览量 回答数 0

问题

支付宝的性能测试

云效平台 2019-12-01 21:47:13 5472 浏览量 回答数 1

问题

从BUG库看一个测试开发团队的自我修养

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