操作系统上使用了 Oracle 的 Java 版权代码,2、多厂商推送通道集成原理在信鸽一期的多厂商通道集成能力中

by admin on 2020年3月13日

摘要腾讯移动推送(信鸽)正式推出多厂商通道的一体式推送方案,号称Android首家实现统一推送服务的云厂商。1、前言关于国内安卓推送环境,作为开发者深受其苦:厂商通道各自为战,第三方通道互保策略共存,导致开发者对推送效果不满、手机用户对推送服务不满、厂商对多通道策略不满,造成了混乱的市场现状。腾讯移动推送(信鸽)作为统一推送联盟副理事长,在推动统一推送标准的建立与落实中,腾讯信鸽提出多厂商通道一体化的集成式推送解决方案,为整合推送环境、统一推送规范迈出了实验性的一步。2、多厂商推送通道集成原理在信鸽一期的多厂商通道集成能力中,信鸽开放了对小米、华为、魅族等厂商的通道集成能力,后续也会持续优化和扩充。在集成版本的SDK中,信鸽可以实现:1)根据用户的设备品牌信息,自动选择使用对应厂商的推送通道;2)一次推送自动分发至多个厂商通道,并提供统一的管理台查看推送数据;3)开发者可以通过勾选打开/关闭分通道推送的能力,来选择是否调用该功能。现有的推送流程如下:3、多厂商推送通道集成具体实现3.1
统一账号系统每个PUSH SDK
都会生成一个唯一标识的字符串来标识集成了其SDK的设备,用于PUSH后台来标识终端设备,统一称之为TOKEN。由于集成了多方厂商PUSH
SDK,
每个厂商都会有就自己的账号Token体系,所以信鸽需要有一套统一的账号体系将各个厂商的账号体系关联起来。业务消息来时,会先调用信鸽Token,检查该Token是否有后台绑定关系的其他厂商通道注册Token。统一账号体系的流程如下:1)信鸽PUSH
SDK 从后台获取本设备的唯一标识TOKEN,
其生成主要是依据设备的设备ID,应用的包名等信息计算得到;2)根据用户设备的调用机型,调用对应的第三方PUSH
SDK相应中的注册API,获得厂商通道的设备TOKEN;3)将信鸽PUSH
TOKEN跟第三方PUSH TOKEN进行帐号关联。3.2
通道选择当有业务消息推送到信鸽PUSH后台时,信鸽会进行任务的拆解下发。根据后台Token的记录,如果有对应的厂商Token,优先推送厂商通道,否则推送信鸽通道。通道选择原则:1)优先选择厂商PUSH通道;2)厂商通道注册失败时,选择信鸽通道。

摘要谷歌与 Oracle 之间的 Java 版权之争基本有了结果,谷歌因为在 Android
操作系统上使用了 Oracle 的 Java 版权代码,需要向 Oracle 支付 88
亿美元的赔偿。谷歌与 Oracle 之间的 Java 版权之争基本有了结果,谷歌因为在
Android 操作系统上使用了 Oracle 的 Java 版权代码,需要向 Oracle 支付 88
亿美元的赔偿。3 月 27 日,美国联邦巡回法院裁定,谷歌在 Android
上使用了大量 Java 代码,侵犯了 Oracle 的版权。版权之争在 2010
年就已立案,当时 Oracle 向 Alphabet 公司提出至少 88
亿美元的赔偿。谷歌对此感到失望,并表示会进一步采取措施,寻求其他解决方案。代码版权之争让硅谷的整个软件产业陷入了数年的“分裂”状态。一波人开发非功能性的基础代码,另一波人使用这些代码来开发应用程序,并认为版权法应该将使用这些基础代码视作一个例外。来自波斯顿
Burns&Levinson 律师事务所的 Mark Schonfeld
表示,“是否将代码使用作为版权的一个例外,这对于整个软件行业来说是个非常重大的决定。我认为这应该由最高法院来裁定,毕竟联邦巡回法院所做出的决定存在很大的争议。”Oracle
的法律总顾问 Dorian Daley
在一份声明中说道,“联邦巡回法院秉持版权法的基本原则,确定谷歌违反了版权法。这一决定是对原作者的保护,避免他们应有的权利遭到破坏”。谷歌及其支持者对这一裁决提出异议,认为这样会影响到新软件的开发,并给软件用户带来更高的使用成本。谷歌在一份声明中说道,“陪审团认为
Java
应该是开放的,每个人都可以免费使用,但法院却推翻了这一观点。这样的裁决只会增加软件用户的使用成本。”Oracle
表示,如果只是使用 Java
开发桌面应用程序或移动应用程序,是可以免费的。但如果要用 Java
开发竞争平台,或者把它嵌入到电子设备中,那么就需要加以限制。联邦巡回法院认为,尽管
Android 没有向用户收取许可费用,但这并不代表谷歌没有从 Java API
中获得商业利益,Android 已经为谷歌带来超过 420 亿美元的广告收入。Oracle
寻求的赔偿金额超过了 88
亿美元,而谷歌表示他们并未从中获得多少利益。来自波士顿 Mirick O’Connell
律师事务所的 Ping Hu 认为,这一争端可能会更多地暴露谷歌从 Android
这个免费系统上获得了多少利益。他说,“Oracle
赢得了战场,但战争并未结束”。Oracle 宣称,谷歌在 2000
年中期急于开发移动操作系统,在没有支付任何版权费用的情况下使用了 Java
技术中受版权保护的关键部分。谷歌反驳说,Oracle
纯粹是出于嫉妒,因为他们做了 Oracle
做不到的事情——开发了一款流行的免费移动操作系统。谷歌说他们只用了 Oracle
的一小部分代码,这些代码只够让 Android 开发者使用 Java
来开发应用程序。2016
年,加利福利亚的联邦陪审团站在了谷歌一边,认为谷歌的行为是“正当”的,应该被视为版权法的一个例外,但联邦巡回法院在最终的裁决中否定了这一论断。法院方面表示,“将受版权保护的成果用于相同的目的,并用它们创建与原作者相竞争的平台,这样的行为没有任何正当性可言“。谷歌希望联邦巡回法院能够重新考虑裁决结果,他们可以上诉到最高法院,而这也正是谷歌支持者所希望看到的。2014
年,最高法院曾经拒绝评审由联邦巡回法院提出的一份提议,联邦巡回法院在这一提议中表示,谷歌所使用的代码是受版权保护的。来
Public Knowledge 的政策顾问 Meredith Rose
说,联邦巡回法院的裁决打破了在软件行业运作了数十年的”潜规则”。Rose
还在一份声明中说道,“这对技术行业的竞争态势、开放性和发展造成了毁灭性的打击,对于软件用户来说,这也意味着更高的使用成本、更少的选择和更糟糕的产品体验”。Java
是由 Sun Microsystems 公司于 90 年代中期推出的一门编程语言。2010 年 1
月,Oracle 以 74 亿美元的价格收购了 Sun 公司。8 个月之后,Oracle
就向谷歌提起了版权诉讼。

摘要NGINX 官方博客正式宣布 NGINX 支持原生的
gPRC,现在就可以从代码仓库拉取快照版本。该特性将会被包含在 NGINX OSS
1.13.10、NGINX Plus R15 以及 NGINX 1.13.9 当中。引言NGINX
官方博客正式宣布 NGINX 支持原生的
gPRC,现在就可以从代码仓库拉取快照版本。该特性将会被包含在 NGINX OSS
1.13.10、NGINX Plus R15 以及 NGINX 1.13.9
当中(博客原文链接:
已经能够代理 gRPC TCP 连接,用户可以用它:发布 gRPC 服务,并应用 NGINX
提供的 HTTP/2 TLS 加密机制、速率限定、基于 IP
的访问控制以及日志等功能。在单个端点上发布多个 gRPC 服务,使用 NGINX
检查方法调用,将各个方法调用路由到相应的服务上。对一组 gRPC
服务进行负载均衡,可以使用轮询算法、最少连接数原则或其他方式在集群上分发流量。什么是
gRPC?gRPC
是一种远程过程调用协议(gRPC官网:
3.x,基于Netty 4.x +,用于客户端和服务器端之间的通信。gRPC
紧凑小巧,跨多种编程语言,同时支持请求与响应式的交互方式和流式交互方式。gRPC
因其跨语言特性和简洁的设计变得越来越流行,其中服务网格的实现就使用了
gRPC。gRPC 通过 HTTP/2 传输数据,可以传输明文文本数据和 TLS
加密过的数据。gRPC 调用是通过 HTTP POST
请求来实现的,每个请求里包含了一个编码过的消息体(protocol buffer
是默认的编码方式)。gRPC
的响应消息里也包含一个编码过的消息体,并在消息尾部带上状态码。gRPC
不能通过 HTTP 进行传输,而必须使用 HTTP/2,这是因为要充分利用 HTTP/2
连接的多路复用和流式特性。通过 NGINX 来管理 gRPC 服务下面的示例对 gRPC
的 Hello World
快速入门教程进行了修改,用它来创建一个简单的客户端到服务器端应用。例子中提供了
NGINX
的配置信息,而把应用程序的实现留给读者,不过文中还是会给出一些提示。1、暴露简单的
gRPC 服务首先,在客户端和服务器端之间安插 NGINX,NGINX
为服务器端的应用程序提供了一个稳定可靠的网关。然后开始部署包含了 gRPC
更新包的 NGINX。如果要从源代码开始编译 NGINX,要记得把 http_ssl 和
http_v2 两个模块包含进去:$ auto/configure –with-http_ssl_module
—with-http_v2_moduleNGINX 使用一个 HTTP 服务器来监听 gRPC 流量,并使用
grpc_pass 指令来代理 gRPC 流量。像下面的配置那样,在 80
端口上监听未加密的 gRPC 流量,并把请求重定向到 50051 端口上:http {
log_format main ‘$remote_addr – $remote_user [$time_local]
“$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent”‘; server { listen 80 http2; access_log
logs/access.log main; location / { # Replace localhost:50051 with the
address and port of your gRPC server # The ‘grpc://’ prefix is
optional; unencrypted gRPC is the default grpc_pass
grpc://localhost:50051; } }}要确保 grpc_pass
的地址是正确的。然后重新编译客户端,让它指向 NGINX 的 IP
地址和端口。在运行新的客户端时,可以看到与之前一样的响应消息,不过这时
NGINX 会终断和转发事务。这个可以从访问日志中看出来:$ tail
logs/access.log192.168.20.1 – – [01/Mar/2018:13:35:02 +0000] “POST
/helloworld.Greeter/SayHello HTTP/2.0” 200 18 “-”
“grpc-go/1.11.0-dev”192.168.20.1 – – [01/Mar/2018:13:35:02 +0000]
“POST /helloworld.Greeter/SayHelloAgain HTTP/2.0” 200 24 “-”
“grpc-go/1.11.0-dev”要注意,NGINX 不支持在同一个明文(非
TLS)端口上同时使用 HTTP/1 和
HTTP/2,如果一定要同时使用两种版本的协议,需要分别为它们创建不同的端口。2、发布基于
TLS 的 gRPC 服务Hello World 快速入门教程使用的是未加密的
HTTP/2,这样方便测试和部署,但要部署到生产环境就不能这么简单了。可以通过
NGINX 来增加一个加密层:创建一个自签名的证书对,然后修改 NGINX
服务器的配置如下:server { listen 1443 ssl http2; ssl_certificate
ssl/cert.pem; ssl_certificate_key ssl/key.pem; #…}让 gRPC
客户端使用 TLS,连接到 1443
端口,并禁用证书检查——这在使用自签名证书或未经信任的证书时是一个必要的步骤。例如,如果使用了
Go 语言编写的示例,就需要导入 crypto/tls 和
google.golang.org/grpc/credentials,并修改 grpc.Dial() 方法:creds :=
credentials.NewTLS( &tls.Config{ InsecureSkipVerify: true } )//
记得修改地址,使用新的端口conn, err := grpc.Dial( address,
grpc.WithTransportCredentials( creds ) )这样就可以加密 gRPC
流量了。在部署到生产环境时,需要将自签名证书换成由可信任证书机构发布的证书,客户端也需要配置成信任该证书。3、代理加密的
gRPC 服务有时候可能需要在内部对 gRPC
流量进行加密,那么就要修改服务器端应用程序的配置,把原先监听未加密(grpc)连接改为监听
TLS 加密(grpcs)连接。cer, err := tls.LoadX509KeyPair( “cert.pem”,
“key.pem” )config := &tls.Config{ Certificates: []tls.Certificate{cer}
}lis, err := tls.Listen( “tcp”, port, config )在 NGINX 的配置里,需要将
grpc-pass 配置成上游服务器的地址:# Use grpcs for TLS-encrypted gRPC
trafficgrpc_pass grpcs://localhost:50051;4、路由 gRPC
流量如果同时存在多个 gRPC
服务,并且每个服务是由不同的服务器应用程序提供的,那么该怎么办?如果能够将这些服务通过单个
TLS 端点暴露出来是不是更好?在 NGINX
里,可以对服务和它的方法稍作修改,然后使用 location 指令来路由流量。gRPC
的请求 URL 是使用包名、服务名和方法名来生成的。比如这个叫作 SayHello 的
RPC 方法:package helloworld;service Greeter { rpc SayHello
(HelloRequest) returns (HelloReply) {}}调用这个方法就会生成一个 POST
请求,URL 是
/helloworld.Greeter/SayHello,这个可以从日志中看出来:192.168.20.1 – –
[01/Mar/2018:13:35:02 +0000] “POST /helloworld.Greeter/SayHello
HTTP/2.0” 200 18 “-” “grpc-go/1.11.0-dev”要使用 NGINX
来路由流量,可以这样配置:location /helloworld.Greeter { grpc_pass
grpc://192.168.20.11:50051;}location /helloworld.Dispatcher { grpc_pass
grpc://192.168.20.21:50052;}location / { root html; index index.html
index.htm;}6、对 gRPC 流量进行负载均衡那么该如何增加 gRPC
服务的容量,以便提供高可用性?可以使用 NGINX 的 upstream 组:upstream
grpcservers { server 192.168.20.21:50051; server
192.168.20.22:50052;}server { listen 1443 ssl http2; ssl_certificate
ssl/certificate.pem; ssl_certificate_key ssl/key.pem; location
/helloworld.Greeter { grpc_pass grpc://grpcservers; error_page 502 =
/error502grpc; } location = /error502grpc { internal; default_type
application/grpc; add_header grpc-status 14; add_header grpc-message
“unavailable”; return 204; }}当然,如果上游监听的是 TLS 端口,可以使用
grpc_pass grpcs://upstreams。NGINX
支持多种负载均衡算法,其内置的健康检测机制可以检测到无法及时响应或发生错误的服务器,并把它们移除。如果没有可用的服务器,就会返回
/error502grpc 指定的错误消息。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图