zoukankan      html  css  js  c++  java
  • 老王讲自制RPC框架.(一.前言与技术选型)

    (#)背景

    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

    • 单一应用架构
      • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
      • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
    • 垂直应用架构
      • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
      • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
    • 分布式服务架构
      • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
      • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
    • 流动计算架构
      • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
      • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键

    (#)架构

    节点角色说明:

    • Provider: 暴露服务的服务提供方。
    • Consumer: 调用远程服务的服务消费方。
    • Registry: 服务注册与发现的注册中心。
    • Monitor: 统计服务的调用次调和调用时间的监控中心。
    • Container: 服务运行容器。

    调用关系说明:

    • 0. 服务容器负责启动,加载,运行服务提供者。
    • 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
    • 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
    • 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
    • 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
    • 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

    (#)简介与技术选型
    RPC(REMOTE PROCEDURE CALL),说的简单点就是在本地,调用另一个服务器上的服务。

    RPC在数据传输上,可以基于HTTP,TCP协议,如Hession是基于HTTP协议的RPC框架,本身的有点是跨平台性,但是性能上
    确不如基于TPC协议的RPC框架,因为TCP协议是传输层协议,HTTP是应用层协议,越底层的一般性能上会更好一些。

    主要影响整体框架性能的是传输方式和序列化,在数据传输方面一般会选择TCP。就序列化而言,比如protobuf,hession
    jackson 等都是很优秀的序列化方式,用来代替java自带的序列化方式,从而提供更高效的性能。

    为了支持高并发,普通的BIO显然会严重的影响性能,因此我们需要使用NIO,但是底层的NIO API使用起来需要熟悉的技术点
    太多,需要结合各种多线程知识,所以我们使用netty框架来屏蔽掉底层的操作。

    我们同时需要将服务部署在分布式的环境中,通过服务注册的方式,让客户端发现当前可用的服务,并调用这些服务,这里
    就需要用到一种服务注册的组件,让它来注册所有分布式环境下服务的地址。此外为了防止出现单点故障,需要部署集群环境。

    综上所述,技术选型如下
    1:spring
    2.netty
    3.protostuff
    4.zookeeper
    5.动态代理

  • 相关阅读:
    LeetCode Path Sum II
    LeetCode Longest Palindromic Substring
    LeetCode Populating Next Right Pointers in Each Node II
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Binary Tree Maximum Path Sum
    LeetCode Find Peak Element
    LeetCode Maximum Product Subarray
    LeetCode Intersection of Two Linked Lists
    一天一个设计模式(1)——工厂模式
    PHP迭代器 Iterator
  • 原文地址:https://www.cnblogs.com/wscit/p/6040445.html
Copyright © 2011-2022 走看看