精华内容
下载资源
问答
  • 基于zookeeper 监控dubbo provider 下线,提供dubbo 服务下线 邮箱预警,对dubbo 代码0入侵,完全独立部署,独立的JAR
  • 强制下线功能

    2017-07-02 18:39:56
    实现仿QQ 强制下线功能
  • 易语言恶搞QQ下线源码,恶搞QQ下线
  • 主观下线和客观下线

    2019-06-01 18:12:00
    sentinel monitor <mastername>...主观下线 每个 sentinel 节点对 redis 节点失败的“偏见”; 客观下线 所有 sentinel 节点对 redis 节点失败“达成共识”(超过 quorum 个同意); 注: sent...

    sentinel monitor <mastername> <ip> <port> <quorum>

    主观下线

    • 每个 sentinel 节点对 redis 节点失败的“偏见”;

    客观下线

    • 所有 sentinel 节点对 redis 节点失败“达成共识”(超过 quorum 个同意);

    注:

    • sentinel 节点要是基数;
    • quorum 要配置成 sentinel 节点数的一半 + 1;
    展开全文
  • NodeManager 下线

    2019-08-15 11:08:17
    hadoop nodemanager如何安全的下线,不影响线上数据,在这里记录一下备忘。 1.配置 在yarn-site.xml文件中增加以下配置,avtive和standby ResourceManager都需要添加。 <property> <name>yarn....

    hadoop nodemanager如何安全的下线,不影响线上数据,在这里记录一下备忘。

    1.配置

    在yarn-site.xml文件中增加以下配置,avtive和standby ResourceManager都需要添加。

    <property>
       <name>yarn.resourcemanager.nodes.exclude-path</name>
      <value>/www/hadoop-2.7.4/etc/hadoop/nodemanager.excludes</value>
    </property>
    

    2.执行命令

    touch /www/hadoop-2.7.4/etc/hadoop/nodemanager.excludes
    vim /www/hadoop-2.7.4/etc/hadoop/nodemanager.excludes
    加入要下线的机器host或ip
    
    执行
    yarn rmadmin -refreshNodes
    
    展开全文
  • qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可以给你带来参考价值...

    qq强制下线(实现一个类似QQ的强制下线功能),哪吒游戏网给大家带来详细的qq强制下线(实现一个类似QQ的强制下线功能)介绍,大家可以阅读一下,希望这篇qq强制下线(实现一个类似QQ的强制下线功能)可以给你带来参考价值。

    此处UI界面并不会写的很好看,就是一个简单的类似于强制下线功能,要用到的类如下:

    e173f0de38e5cbc7eebb99ec0c56209e.png

    这些类的主要做用:

    此处要注意的是MainActivity,LoginActivity都是继承BaseActivity的,因为BaseActivity是继承AppCompatActivity的qq强制下线,所以并不会影响这两个活动的正常使用。

    将主活动设置为LoginActivityqq强制下线,就是应用启动打开的第一个界面是LoginActivity的内容。

    代码如下:

    ActivityCollector:

    /**

    * 此类用来管理活动

    */

    public class ActivityCollector {

    // 创建一个Activity的列表

    public static List activities = new ArrayList<>();

    // 添加activity到activities中去

    public static void addActivity(Activity activity) {

    activities.add(activity);

    }

    // 将activity从activities中移除

    public static void removeActivity(Activity activity) {

    activities.remove(activity);

    }

    // 销毁所有的Activity,也就是将activities中的activity都移除

    public static void finishAll() {

    for (Activity activity : activities) {

    if (!activity.isFinishing()) {

    activity.finish();

    }

    }

    }

    }

    BaseActivity:

    /**

    * 将此类做为所有Activity的父类,就可以轻松的管理Activity了

    */

    public class BaseActivity extends AppCompatActivity {

    private ForceOfflineReceiver forceOfflineReceiver;

    @Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //将继承BaseActivity类的Activity添加到ActivityCollector的列表中去

    ActivityCollector.addActivity(this);

    }

    @Override

    protected void onDestroy() {

    super.onDestroy();

    // 将销毁的Activity从列表中移除

    ActivityCollector.removeActivity(this);

    }

    /**

    * 在应用重新开始时注册广播接收器

    * 在应用暂停时取消注册广播接收器

    * 这样的好处是始终保证只有处于栈顶的活动才能接收到com.my.force_line这条广播

    */

    // 应用重新开始时调用

    @Override

    protected void onResume() {

    super.onResume();

    IntentFilter intentFilter = new IntentFilter();

    intentFilter.addAction("com.my.force_line");

    forceOfflineReceiver = new ForceOfflineReceiver();

    registerReceiver(forceOfflineReceiver, intentFilter);

    }

    // 应用暂停时所调用

    @Override

    protected void onPause() {

    super.onPause();

    unregisterReceiver(forceOfflineReceiver);

    }

    // 创建一个广播接收器

    class ForceOfflineReceiver extends BroadcastReceiver {

    @Override

    public void onReceive(final Context context, final Intent intent) {

    // 写一个强制下线的警告框

    AlertDialog.Builder builder = new AlertDialog.Builder(context);

    builder.setTitle("警告");

    builder.setMessage("你以被强制下线,请重新登录");

    //使此警告框无法被移除

    builder.setCancelable(false);

    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

    @Override

    public void onClick(DialogInterface dialog, int which) {

    // 销毁所有活动

    ActivityCollector.finishAll();

    // 重新启动LoginActivity

    Intent intent = new Intent(context,LoginActivity.class);

    context.startActivity(intent);

    }

    });

    builder.show();

    }

    }

    }

    LoginActivity:

    public class LoginActivity extends BaseActivity {

    private Button btn_login;

    EditText et_account, et_password;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_login);

    btn_login = findViewById(R.id.login);

    et_account = findViewById(R.id.account);

    et_password = findViewById(R.id.password);

    btn_login.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    // 如果帐号等于liang,密码等于12345就登录成功

    if (et_account.getText().toString().equals("liang") && et_password.getText().toString().equals("12345")) {

    Intent intent = new Intent(LoginActivity.this, MainActivity.class);

    startActivity(intent);

    }else {

    Toast.makeText(LoginActivity.this, "帐号或密码错误", Toast.LENGTH_SHORT).show();

    }

    }

    });

    }

    }

    LoginActivity的xml代码:

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    >

    android:id="@+id/account"

    android:hint="请输入帐号"

    android:inputType="text"

    android:layout_width="match_parent"

    android:layout_height="wrap_content" />

    android:id="@+id/password"

    android:hint="请输入密码"

    android:inputType="textPassword"

    android:layout_width="match_parent"

    android:layout_height="wrap_content" />

    android:id="@+id/login"

    android:text="登录"

    android:textSize="20sp"

    android:layout_width="match_parent"

    android:layout_height="wrap_content" />

    LinearLayout>

    MainActivity:

    public class MainActivity extends BaseActivity {

    private Button force_offline;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    force_offline = findViewById(R.id.btn_force_offline);

    // 点击按钮发送一个为com.my.force_line广播

    force_offline.setOnClickListener(new View.OnClickListener() {

    @Override

    public void onClick(View v) {

    // 此处的com.my.force_line是自定义的一个广播

    Intent intent = new Intent("com.my.force_line");

    // 发送广播,此处发送的是标准广播

    sendBroadcast(intent);

    }

    });

    }

    }

    MainActivity的xml代码:

    android:orientation="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    >

    android:id="@+id/btn_force_offline"

    android:text="强制下线"

    android:textSize="20sp"

    android:layout_width="match_parent"

    android:layout_height="wrap_content" />

    LinearLayout>

    总结:以上内容就是针对qq强制下线(实现一个类似QQ的强制下线功能)详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,qq强制下线(实现一个类似QQ的强制下线功能)部分内容转载自互联网,有帮助可以收藏一下。

    展开全文
  • Spring Cloud 优雅下线以及灰度发布

    千次阅读 多人点赞 2020-10-20 10:43:55
    文章目录前言优雅下线常见的下线方式优雅的下线方式灰度发布蓝绿部署滚动部署金丝雀部署 前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会...

    前言

    在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的。那什么是优雅的呢?主要就是指在服务升级的时候,不中断整个服务,让用户无感知,进而不会影响用户的体验,这就是优雅的。

    实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PIDkill -9 PID都是暴力杀死服务,相对于kill -9 PID来说,kill PID就是优雅的。但如果单独拿kill PID出来说,我们能说它是优雅的下线策略吗?肯定不是啊,就是这个道理。

    因此,本文讲述的优雅下线仅能称之为“相对的优雅下线”,但相对于暴力的杀死服务,已经足够优雅了。常见的优雅解决方案,主要包括优雅下线和灰度发布。而实际上,灰度发布的范围就已经包含优雅下线了。最后,在本文中,我们主要讲述基于 Spring Cloud 和 Euraka 的优雅下线以及灰度发布。

    优雅下线

    常见的下线方式

    方式一:kill PID

    使用方式:kill java进程ID

    该方式借助的是 Spring Boot 应用的 Shutdown hook,应用本身的下线也是优雅的,但如果你的服务发现组件使用的是 Eureka,那么默认最长会有 90 秒的延迟,其他应用才会感知到该服务下线,这意味着:该实例下线后的 90 秒内,其他服务仍然可能调用到这个已下线的实例。因此,该方式是不够优雅的 。

    方式二:/shutdown端点

    Spring Boot 提供了/shutdown端点,可以借助它实现优雅停机。

    使用方式:在想下线应用的applicationyml中添加如下配置,从而启用并暴露/shutdown端点:

    management:
      endpoint:
        shutdown:
          enabled: true
      endpoints:
        web:
          exposure:
            include: shutdown
    

    发送 POST 请求到/shutdown端点

    • curl -X http://你想停止的服务地址/actuator/shutdown

    该方式本质和方式一是一样的,也是借助 Spring Boot 应用的 Shutdown hook 去实现的。

    方式三:/pause端点

    Spring Boot 应用提供了/pause端点,利用该端点可实现优雅下线。

    使用方式:在想下线应用的application.yml中添加配置,从而启用并暴露/pause端点:

    management:
      endpoint:
        # 启用pause端点
        pause:
          enabled: true
        # 启用restart端点,之所以要启用restart端点,是因为pause端点的启用依赖restart端点的启用
        restart:
          enabled: true
      endpoints:
        web:
          exposure:
            include: pause,restart
    

    发送 POST 请求到/actuator/pause端点:

    • curl -X POST http://你想停止的服务实例地址/actuator/pause

    执行后的效果类似下图:

    down
    如图所示,该应用在 Eureka Server 上的状已被标记为DOWN,但是应用本身其实依然是可以正常对外服务的。在 Spring Cloud 中,Ribbon 做负载均衡时,只会负载到标记为UP的实例上。利用这两点,你可以:先用/pause端点,将要下线的应用标记为DOWN,但不去真正停止应用;然后过一定的时间(例如 90 秒,或者自己做个监控,看当前实例的流量变成 0 后)再去停止应用,例如kill应用。

    • 缺点 & 局限
    缺点描述
    不同的版本配置不大一样早期的 Spring Cloud 版本中,pause端点是不依赖restart端点的
    无法和 Eureka 的健康检查配合使用如果你的服务发现组件用的是 Eureka,并且你的应用开启了健康检查eureka.client.healthcheck.enabled = true,那么/pause端点无效

    方式四:/service-registry端点

    使用方式:在想下线应用的application.yml中添加配置,从而暴露/service-registry端点:

    management:
      endpoints:
        web:
          exposure:
            include: service-registry
    

    发送 POST 请求到/actuator/service-registry端点:

    curl -X "POST" "http://localhost:8000/actuator/service-registry?status=DOWN" \
       -H "Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"
    

    实行后的效果类似如下图:
    down

    优雅的下线方式

    在上文中,我们讲述了四种常见的下线方式,对比来看,方式四 是一种比较优雅的下线方式。

    在实际项目中,我们可以先使用/service-registry端点,将服务标记为DOWN,然后监控服务的流量,当流量为 0 时,即可升级该服务。当然,这里假设我们部署了多个服务实例,当一个服务实例DOWN掉之后,其他服务实例仍然是可以提供服务的,如果就部署一台服务的话,那么讨论优不优雅就没那么重要了。

    除了上述的下线方式之外,还有一种利用EurekaAutoServiceRegistration对象达到优雅下线的目标。

    • 执行eurekaAutoServiceRegistration.start()方法时,当前服务向 Eureka 注册中心注册服务;
    • 执行eurekaAutoServiceRegistration.stop()方法时,当前服务会向 Eureka 注册中心进行反注册,注册中心收到请求后,会将此服务从注册列表中删除。

    示例代码如下:

    @RestController
    @RequestMapping(value = "/graceful/registry-service")
    public class GracefulOffline {
    
        @Autowired
        private EurekaAutoServiceRegistration eurekaAutoServiceRegistration;
    
        @RequestMapping("/online")
        public String online() {
            this.eurekaAutoServiceRegistration.start();
            return "execute online method, online success.";
        }
    
        @RequestMapping("/offline")
        public String offline() {
            this.eurekaAutoServiceRegistration.stop();
            return "execute offline method, offline success.";
        }
    }
    

    到这里,我们已经介绍了两种相对优雅的下线方式了。具体如何操作,我们可以根据实际上情况进行包装,或者利用自动化的脚本来实现更加优雅的下线方式。

    灰度发布

    蓝绿部署

    蓝绿部署,英文名为 Blue Green Deployment,是一种可以保证系统在不间断提供服务的情况下上线的部署方式。

    如何保证系统不间断提供服务呢?那就是同时部署两个集群,但仅对外提供一个集群的服务,当需要升级时,切换集群进行升级。蓝绿部署无需停机,并且风险较小。其大致步骤为:

    1. 部署集群 1 的应用(初始状态),将所有外部请求的流量都打到这个集群上
    2. 部署集群 2 的应用,集群 2 的代码与集群 1 不同,如新功能或者 Bug 修复等
    3. 将流量从集群 1 切换到集群 2
    4. 如集群 2 测试正常,就删除集群 1 正在使用的资源(例如实例),使用集群 2 对外提供服务

    因为在使用蓝绿部署的方式时,我们需要控制流量,所以我们需要借助路由服务,如 Nginx 等。

    滚动部署

    滚动部署,英文名为 Rolling Update,同样是一种可以保证系统在不间断提供服务的情况下上线的部署方式。和蓝绿部署不同的是,滚动部署对外提供服务的版本并不是非此即彼,而是在更细的粒度下平滑完成版本的升级。

    如何做到细粒度平滑升级版本呢?滚动部署只需要一个集群,集群下的不同节点可以独立进行版本升级。比如在一个 12 节点的集群中,我们每次升级 4 个节点,并将升级后的节点重新投入使用,周而复始,直到集群中所有的节点都更新为新版本。

    这种部署方式相对于蓝绿部署,更加节约资源,因为它不需要运行两个集群。但这种方式也有很多缺点,例如:

    1. 没有一个确定 OK 的环境。使用蓝绿部署,我们能够清晰地知道老版本是 OK 的,而使用滚动发布,我们无法确定。
    2. 修改了现有的环境。
    3. 如果需要回滚,很困难。举个例子,在某一次发布中,我们需要更新 100 个实例,每次更新 10 个实例,每次部署需要 5 分钟。当滚动发布到第 80 个实例时,发现了问题,需要回滚。这时,我们估计就要疯了。
    4. 有的时候,我们还可能对系统进行动态伸缩,如果部署期间,系统自动扩容/缩容了,我们还需判断到底哪个节点使用的是哪个代码。尽管有一些自动化的运维工具,但是依然令人心惊胆战。

    并不是说滚动发布不好,滚动发布也有它非常合适的场景。

    金丝雀部署

    金丝雀部署又称灰度部署(或者,灰度发布),英文名为 Canary Deployment,是指在黑与白之间,能够平滑过渡的一种发布方式。

    金丝雀的名称来源于「矿井中的金丝雀」,早在 17 世纪,英国矿井工人发现,金丝雀对瓦斯这种气体十分敏感,空气中哪怕有极其微量的瓦斯,金丝雀也会停止歌唱;而当瓦斯含量超过一定限度时,虽然鲁钝的人类毫无察觉,金丝雀却早已毒发身亡。当时在采矿设备相对简陋的条件下,工人们每次下井都会带上一只金丝雀作为“瓦斯检测指标”,以便在危险状况下紧急撤离。

    我们来看一下金丝雀部署的步骤:

    1. 准备好部署各个阶段的工件,包括:构建工件,测试脚本,配置文件和部署清单文件
    2. 从负载均衡列表中移除掉“金丝雀”服务器
    3. 升级“金丝雀”应用(切断原有流量并进行部署)
    4. 对应用进行自动化测试
    5. 将“金丝雀”服务器重新添加到负载均衡列表中(连通性和健康检查)
    6. 如果“金丝雀”在线使用测试成功,升级剩余的其他服务器(否则就回滚)

    在金丝雀部署中,常常按照用户量设置路由权重,例如 90% 的用户维持使用老版本,10% 的用户尝鲜新版本。不同版本应用共存,经常与 A/B 测试一起使用,用于测试选择多种方案。金丝雀部署比较典型的例子,就是我们在使用某个应用的时候,该应用邀请我们进行“内测”或者“新版本体验”,如果我们同意了,那么我们就成了金丝雀。


    参考资料

    展开全文
  • 动力引下线.doc

    2021-09-19 07:46:08
    动力引下线.doc
  • CSDN博客「推荐卡」下线公告

    万次阅读 多人点赞 2020-08-20 15:27:18
    我们的「推荐卡」权益于8月24日(下周一)将下线 但是此次下线并不是意味着就再见了 而是为了更好地功能体验 我们将会对「推荐卡」的功能以及权益进行优化 到时候我们的「推荐卡」将会带着全新样貌回归 一起...
  • 主观下线 每个 sentinel 节点对 redis 节点失败的“偏见”; 客观下线 所有 sentinel 节点对 redis 节点失败“达成共识”(超过 quorum 个同意); 注: sentinel 节点要是基数; quorum 要配置成 sentinel 节点数...
  • 主要为大家详细介绍了kotlin实现强制下线功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • eureka强制下线上线

    千次阅读 2019-09-05 17:01:45
    eureka下线和上线操作 可以通过postman和soapui或者其他http工具来发送命令: 下线:调用方式:PUT ... 上线调用方式:PUT ...
  • 我们需要知道 Sentinel 是通过对自己监控的所有实例(主服务器、从服务器、监控当前主服务器的其他Sentinel)发送PING 命令来判断服务是否下线的,然后Sentinel既然...Sentinel是根据时间长度来判断是否下线的,也就
  • CDH主机下线

    2020-11-24 14:10:01
    文章目录1,配置hdfs, hbase: 提高下线速度2,主机:进入维护模式3, 主机解除授权: Decommission(退役)解除授权的操作细节hdfs 数据转移hbase数据转移 参考:...
  • Eureka强制下线

    千次阅读 2018-07-11 10:18:12
    Eureka强制下线 强制下线 可以通过调用stateUpdate接口,更改实例的状态为OUT_OF_SERVICE 。 实现方式 调用接口:/eureka/apps/appID/instanceID/status?value=OUT_OF_SERVICE 调用示例:...
  • 强制当前账号下线

    2016-06-29 17:38:55
    模拟服务器用户二次登陆消息,然后发送强制下线广播,弹出对话框让用户重新登陆。
  • 本篇文章主要介绍了Android运用BroadcastReceiver实现强制下线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 强制下线功能源码

    2015-08-14 14:04:18
    强制下线功能的源码,在Android Studio下运行
  • 易语言源码易语言恶搞QQ下线源码.rar 易语言源码易语言恶搞QQ下线源码.rar 易语言源码易语言恶搞QQ下线源码.rar 易语言源码易语言恶搞QQ下线源码.rar 易语言源码易语言恶搞QQ下线源码.rar 易语言源码易语言恶搞...
  • 一个sentinel集群可以监控多个master/slave节点,对多套master/slave节点进行区分。 quorum法定人数。客观下线的时候,判断依据 ...主管下线判断,一个sentinel对master/slave节点,超过timeout节点对该redis节点下...
  • redisCluster之主观下线与客观下线

    千次阅读 2018-09-09 14:21:51
    主观下线:    节点之间会定期的执行ping/pong消息来证明节点之间的连通性,若节点一向节点二发送ping消息之后收到pong消息,那么节点一将会更新最后一次与节点二的通信时间,若没有收到pong消息,那么节点一与...
  • 易语言恶搞QQ下线源码
  • 电机下线工艺与技巧.pdf
  • 引下下线隐蔽记录.doc

    2021-09-19 07:41:10
    引下下线隐蔽记录.doc
  • 接地干线引下线安装.doc
  • 产品下线启动仪式方案.pdf
  • Broadcast广播实现强制下线功能,利用广播实现强制下线功能
  • 网盘下线 云服务前景蒙阴.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 89,948
精华内容 35,979
关键字:

下线