成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

基于 lumen 的微服務(wù)架構(gòu)實踐

hatlonely / 2659人閱讀

摘要:現(xiàn)在的提供了一種更易于使用和維護(hù)的計劃任務(wù)方式。注意事項建議開啟這樣會極大的加速類的加載。

lumen
為速度而生的 Laravel 框架

官網(wǎng)的介紹很簡潔,而且 lumen 確實也很簡單,我在調(diào)研了 lumen 相關(guān)組件(比如緩存,隊列,校驗,路由,中間件和最重要的容器)之后認(rèn)為已經(jīng)能夠滿足我目前這個微服務(wù)的需求了。

任務(wù)目標(biāo)

因為業(yè)務(wù)需求,需要在內(nèi)網(wǎng)服務(wù)B中獲取到公網(wǎng)服務(wù)A中的數(shù)據(jù),但是B服務(wù)并不能直接對接公網(wǎng),于是需要開發(fā)一個relay 中轉(zhuǎn)機(jī)來完成數(shù)據(jù)轉(zhuǎn)存和交互。

任務(wù)列表

環(huán)境準(zhǔn)備 【done】

RSA數(shù)據(jù)加密 【done】

guzzle請求封裝 【done】

添加monolog日志【done】

數(shù)據(jù)庫migrate【done】

Event和Listener的業(yè)務(wù)應(yīng)用 【done】

Scheduler計劃任務(wù)(基于crontab)【done】

Jobs和Queue業(yè)務(wù)應(yīng)用

使用supervisor守護(hù)queue進(jìn)程和java進(jìn)程

添加sentry來獲取服務(wù)日志信息和實現(xiàn)郵件報警

jwt用戶身份校驗

.env 文件的配置

可能的擴(kuò)展 K8S docker

性能并發(fā)測試 【done】

環(huán)境準(zhǔn)備

機(jī)器是centos6.8, 使用work用戶, 安裝 php(^7),mysql,nginx,redis

yum 安裝的同學(xué)可以試試 https://www.softwarecollectio...

安裝composer

https://getcomposer.org/downl...

# 注意php的環(huán)境變量
php -r "copy("https://getcomposer.org/installer", "composer-setup.php");"
php -r "if (hash_file("sha384", "composer-setup.php") === "93b54496392c062774670ac18b134c3b3a95e5a5e5c8f1a9f115f203b75bf9a129d5daa8ba6a13e2cc8a1da0806388a8") { echo "Installer verified"; } else { echo "Installer corrupt"; unlink("composer-setup.php"); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink("composer-setup.php");"

mv composer.phar /usr/local/bin/composer

安裝lumen

composer global require "laravel/lumen-installer"

composer create-project --prefer-dist laravel/lumen YOURPROJECT

配置 .env

配置
Lumen 框架所有的配置信息都是存在 .env 文件中。一旦 Lumen 成功安裝,你同時也要 配置本地環(huán)境。

應(yīng)用程序密鑰
在你安裝完 Lumen 后,首先需要做的事情是設(shè)置一個隨機(jī)字符串到應(yīng)用程序密鑰。通常這個密鑰會有 32 字符長。 
這個密鑰可以被設(shè)置在 .env 配置文件中。如果你還沒將 .env.example 文件重命名為 .env,那么你現(xiàn)在應(yīng)該
去設(shè)置下。如果應(yīng)用程序密鑰沒有被設(shè)置的話,你的用戶 Session 和其它的加密數(shù)據(jù)都是不安全的!

配置nginx 和 php-fpm

配置nginx的server

server {
    listen 8080;
    server_name localhost;
    index index.php index.html index.htm;
    root /home/work/YOURPROJECT/public;
    error_page 404 /404.html;

    location / {
            try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .php$ {
            root /home/work/YOURPROJECT/public;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
            #include        fastcgi.conf;
    }
}

php-fpm的監(jiān)聽端口

推薦一篇文章:Nginx+Php-fpm運(yùn)行原理詳解

lumen 基礎(chǔ)介紹

lumen的入口文件是 public/index.php,在nginx配置文件中已有體現(xiàn)

初始化核心容器是 bootstrap/app.php 它做了幾件非常重要的事情

加載了 composer的 autoload 自動加載

創(chuàng)建容器并可以選擇開啟 Facades 和 Eloquent (建議都開啟,非常方便)

Register Container Bindings:注冊容器綁定 ExceptionHandler(后面monolog和sentry日志收集用到了) 和 ConsoleKernel(執(zhí)行計劃任務(wù))

Register Middleware:注冊中間件,例如auth驗證: $app->routeMiddleware(["auth" => AppHttpMiddlewareAuthenticate::class,]);

注冊Service Providers

$app->register(AppProvidersAppServiceProvider::class);
$app->register(AppProvidersAuthServiceProvider::class);
$app->register(AppProvidersEventServiceProvider::class);

在AppServiceProvider 里還能一起注冊多個provider
// JWT
$this->app->register(TymonJWTAuthProvidersLumenServiceProvider::class);
// redis
$this->app->register(IlluminateRedisRedisServiceProvider::class);
// 方便IDE追蹤代碼的Helper,因為laravel使用了大量的魔術(shù)方法和call方法以至于,對IDE的支持并不友好,強(qiáng)烈推薦開發(fā)環(huán)境安裝
$this->app->register(BarryvdhLaravelIdeHelperIdeHelperServiceProvider::class);
// sentry
$this->app->register(SentrySentryLaravelSentryLumenServiceProvider::class);

加載route文件 routes/web.php

//localhost:8080/test  調(diào)用app/Http/Controllers/Controller.php的 test方法
$router->get("/test", ["uses" => "Controller@test"]);
// 使用中間件進(jìn)行用戶校驗
$router->group(["middleware" => "auth:api"], function () use ($router) {
    $router->get("/auth/show", "AuthController@getUser");
});

還可以添加其他初始化控制的handler,比如說這個 monolog日志等級和格式,以及集成sentry的config

$app->configureMonologUsing(function(MonologLogger $monoLog) use ($app){
    // 設(shè)置processor的extra日志信息等級為WARNING以上,并且不展示Facade類的相關(guān)信息
    $monoLog->pushProcessor(new MonologProcessorIntrospectionProcessor(MonologLogger::WARNING, ["Facade"]));

    // monolog 日志發(fā)送到sentry
    $client = new Raven_Client(env("SENTRY_LARAVEL_DSN"));
    $handler = new MonologHandlerRavenHandler($client);
    $handler->setFormatter(new MonologFormatterLineFormatter(null, null, true, true));
    $monoLog->pushHandler($handler);

    // 設(shè)置monolog 的日志處理handler
    return $monoLog->pushHandler(
        (new MonologHandlerRotatingFileHandler(
            env("APP_LOG_PATH") ?: storage_path("logs/lumen.log"),
            90,
            env("APP_LOG_LEVEL") ?: MonologLogger::DEBUG)
        )->setFormatter(new MonologFormatterLineFormatter(null, null, true, true))
    );
});

配置文件 config/ 和 .env 文件

其他目錄文件用到時再具體說明

RSA數(shù)據(jù)加密

因為業(yè)務(wù)中包含部分敏感數(shù)據(jù),所以,數(shù)據(jù)在傳輸過程中需要加密傳輸。選用了RSA非對稱加密。

借鑒了 PHP 使用非對稱加密算法(RSA)

但由于傳輸數(shù)據(jù)量較大,加密時會報錯,所以采用了分段加密連接和分段解密
php使用openssl進(jìn)行Rsa長數(shù)據(jù)加密(117)解密(128)

如果選擇密鑰是1024bit長的(openssl genrsa -out rsa_private_key.pem 1024),那么支持加密的明文長度字節(jié)最多只能是1024/8=128byte;
如果加密的padding填充方式選擇的是OPENSSL_PKCS1_PADDING(這個要占用11個字節(jié)),那么明文長度最多只能就是128-11=117字節(jié)。如果超出,那么這些openssl加解密函數(shù)會返回false。

分享一個我的完成版的工具類

openssl genrsa -out rsa_private_key.pem 1024
//生成原始 RSA私鑰文件
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
//將原始 RSA私鑰轉(zhuǎn)換為 pkcs8格式
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

使用tip
// 私鑰加密則公鑰解密,反之亦然
$data = GuzzleHttpjson_encode($data);
$EncryptData = Rsa::privateEncrypt($data);
$data = Rsa::publicDecrypt($EncryptData);
guzzle使用

安裝超簡單 composer require guzzlehttp/guzzle:~6.0

guzzle 支持PSR-7 http://docs.guzzlephp.org/en/...

官網(wǎng)的示例也很簡單,發(fā)個post自定義參數(shù)的例子

    use GuzzleHttpClient;
    
    $client = new Client();
    // 發(fā)送 post 請求
    $response = $client->request(
        "POST", $this->queryUrl, [
        "form_params" => [
            "req" => $EncryptData
        ]
    ]);
    
    $callback = $response->getBody()->getContents();
    $callback = json_decode($callback, true);

guzzle支持 異步請求

    // Send an asynchronous request.
    $request = new GuzzleHttpPsr7Request("GET", "http://httpbin.org");
    $promise = $client->sendAsync($request)->then(function ($response) {
        echo "I completed! " . $response->getBody();
    });
    $promise->wait();

值的注意的是github上有一個很好玩的項目 https://github.com/kitetail/zttp

它在guzzle的基礎(chǔ)上做了封裝,采用鏈?zhǔn)秸{(diào)用

    $response = Zttp::withHeaders(["Fancy" => "Pants"])->post($url, [
        "foo" => "bar",
        "baz" => "qux",
    ]);
    $response->json();
    // => [
    //  "whatever" => "was returned",
    // ];
    $response->status();
    // int
    $response->isOk();
    // true / false
    
    #如果是guzzle 則需要更多的代碼
    $client = new Client();
    $response = $client->request("POST", $url, [
        "headers" => [
            "Fancy" => "Pants",
        ],
        "form_params" => [
            "foo" => "bar",
            "baz" => "qux",
        ]
    ]);
    
    json_decode($response->getBody());
monolog日志

在LaravelLumenApplication 中會初始化執(zhí)行

    /**
     * Register container bindings for the application.
     *
     * @return void
     */
    protected function registerLogBindings()
    {
        $this->singleton("PsrLogLoggerInterface", function () {
            // monologConfigurator 我們在 bootstrap/app.php中已經(jīng)初始化了
            if ($this->monologConfigurator) {
                return call_user_func($this->monologConfigurator, new Logger("lumen"));
            } else {
                // 這里new的 Logger 就是 Monolog 類
                return new Logger("lumen", [$this->getMonologHandler()]);
            }
        });
    }

因為monologConfigurator 我們在 bootstrap/app.php中已經(jīng)初始化了,所以lumen實際實現(xiàn)的log類是 RotatingFileHandler(按日期分文件) 格式的log,里面還可以詳細(xì)定義日志的格式,文件路徑,日志等級等

中間有一段 sentry部分的代碼,含義是添加一個monolog日志handler,在發(fā)生日志信息記錄時,同步將日志信息發(fā)送給sentry的服務(wù)器,sentry服務(wù)器的接收地址在 .env的 SENTRY_LARAVEL_DSN 中記錄

    $app->configureMonologUsing(function(MonologLogger $monoLog) use ($app){
        $monoLog->pushProcessor(new MonologProcessorIntrospectionProcessor(MonologLogger::WARNING, ["Facade"]));
    
        // monolog 日志發(fā)送到sentry
        $client = new Raven_Client(env("SENTRY_LARAVEL_DSN"));
        $handler = new MonologHandlerRavenHandler($client);
        $handler->setFormatter(new MonologFormatterLineFormatter(null, null, true, true));
        $monoLog->pushHandler($handler);
    
        return $monoLog->pushHandler(
            (new MonologHandlerRotatingFileHandler(
                env("APP_LOG_PATH") ?: storage_path("logs/lumen.log"),
                90,
                env("APP_LOG_LEVEL") ?: MonologLogger::DEBUG)
            )->setFormatter(new MonologFormatterLineFormatter(null, null, true, true))
        );
    });

準(zhǔn)備動作完成后使用方法就很簡單了

    use IlluminateSupportFacadesLog;
    
    Log::info(11);
    // [2019-01-09 14:25:47] lumen.INFO: 11
    Log::error("error info", $exception->getMessage());
數(shù)據(jù)庫migrate

基本的使用就只有三步,詳情請參考官網(wǎng)文檔 數(shù)據(jù)庫遷移

# 1 初始化遷移文件
php artisan make:migration create_Flights_table

# 2 自定義表結(jié)構(gòu)
class CreateFlightsTable extends Migration
{
   public function up()
   {
       Schema::create("flights", function (Blueprint $table) {
           $table->increments("id");
           $table->string("name");
           $table->string("airline");
           $table->timestamps();
       });
   }
}

# 3 執(zhí)行遷移,執(zhí)行遷移的庫是 .env 中配置好的
php artisan migrate

很推薦使用 migrate 來記錄數(shù)據(jù)庫,它的核心優(yōu)勢是:允許團(tuán)隊簡單輕松的編輯并共享應(yīng)用的數(shù)據(jù)庫表結(jié)構(gòu)

場景1:數(shù)據(jù)庫遷移時,開發(fā)原本需要先從數(shù)據(jù)庫導(dǎo)出表結(jié)構(gòu),然后在新的數(shù)據(jù)庫上執(zhí)行;現(xiàn)在只需要修改數(shù)據(jù)庫連接參數(shù),執(zhí)行 php artisan migrate 就完成了 (線上同步配置文件可以使用分布式文件系統(tǒng),比如Apollo)

場景2:需要alert 字段或索引時,也只需要更新遷移文件然后執(zhí)行更新,因為代碼全程記錄了所有數(shù)據(jù)庫的修改記錄,日后查看相關(guān)數(shù)據(jù)庫信息時也更加方便(相當(dāng)于把sql.log文件放在了php代碼中管理)

如果一個遷移文件執(zhí)行后,內(nèi)容做了修改,需要修改一下文件名稱中的時間,不然執(zhí)行不成功,因為在 migrations 表中已經(jīng)記錄該文件已同步完成的信息了

Event和Listener的業(yè)務(wù)應(yīng)用

首先解決一個問題,為什么要使用Event+Listener 來處理業(yè)務(wù)?

Event事件應(yīng)當(dāng)作為Hook來使用,實現(xiàn)的是代碼結(jié)構(gòu)的解耦,尤其是當(dāng)一個業(yè)務(wù)模塊需要同時關(guān)聯(lián)多個業(yè)務(wù)模塊時,Event+Listener 的工具可以通過解耦代碼使代碼的可維護(hù)性增加,并且可以避免重復(fù)代碼的出現(xiàn)。

在Listener 中可以通過 implements ShouldQueue 這個接口來實現(xiàn)異步隊列執(zhí)行,從而優(yōu)化接口性能

轉(zhuǎn)載一篇有詳細(xì)內(nèi)容的文章 Laravel 中的 Event 和事件的概念

在初始化lumen后,代碼中有Example示例 相關(guān)文件,更多內(nèi)容可以查看官方文檔

AppEventsExampleEvent.php

AppListenersExampleListener.php

Appproviders/EventServiceProvider.php 配置觸發(fā)關(guān)系

Scheduler計劃任務(wù)

scheduler 的使用使開發(fā)擺脫了一種不好的開發(fā)方式:在各種機(jī)器上跑茫茫多的腳本,時間一長這種模式幾乎不可維護(hù),一旦發(fā)生交接時更是特別容易遺漏機(jī)器和腳本。這種傳統(tǒng)的“簡單”方式,毫無疑問會造成相當(dāng)多的麻煩。

現(xiàn)在 laravel 的 scheduler 提供了一種更易于使用和維護(hù)的計劃任務(wù)方式。

過去,你可能需要在服務(wù)器上為每一個調(diào)度任務(wù)去創(chuàng)建 Cron 入口。但是這種方式很快就會變得不友好,因為這些任務(wù)調(diào)度不在源代碼中,并且你每次都需要通過 SSH 鏈接登錄到服務(wù)器中才能增加 Cron 入口。
Laravel 命令行調(diào)度器允許你在 Laravel 中對命令調(diào)度進(jìn)行清晰流暢的定義。且使用這個任務(wù)調(diào)度器時,你只需要在你的服務(wù)器上創(chuàng)建單個 Cron 入口接口。你的任務(wù)調(diào)度在 app/Console/Kernel.php 的 schedule 方法中進(jìn)行定義。

這個單一入口就是在crontab中添加一行

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

這個 Cron 為每分鐘執(zhí)行一次 Laravel 的命令行調(diào)度器。當(dāng) schedule:run 命令被執(zhí)行的時候,Laravel 會根據(jù)你的調(diào)度執(zhí)行預(yù)定的程序。

然后在 app/Console/Kernel.php 中定義任何你想要執(zhí)行的命令,腳本,代碼。

    protected function schedule(Schedule $schedule)
    {
       // 調(diào)用一個閉包函數(shù)
        $schedule->call(function () {
            event(new GetData());
        })->cron("0 */6 * * *");

        // 調(diào)用 Artisan 命令
        $schedule->command("emails:send --force")->daily();

        // 調(diào)度 隊列任務(wù) 分發(fā)任務(wù)到 "heartbeats" 隊列...
        $schedule->job(new Heartbeat, "heartbeats")->everyMinute();

        // 調(diào)用 Shell 命令
        $schedule->exec("sh build.sh")->hourly();

        // 甚至做閉包限制測試:如果給定的 Closure 返回結(jié)果為 true,只要沒有其他約束條件阻止任務(wù)運(yùn)行,任務(wù)就會一直執(zhí)行下去
        $schedule->command("emails:send")->daily()->when(function () {
            return true;
        });

        // 規(guī)定任務(wù)只能在一臺機(jī)器上執(zhí)行
        //為了說明任務(wù)應(yīng)該在單個服務(wù)器上運(yùn)行,在定義調(diào)度任務(wù)時使用 onOneServer 方法。第一個獲取到任務(wù)的服務(wù)器會生成一個原子鎖,用來防止其他服務(wù)器在同一時刻執(zhí)行相同任務(wù)

        ->onOneServer();

        // 任務(wù)輸出到某個文件或發(fā)送到郵箱
        ->sendOutputTo($filePath);
        ->emailOutputTo($email);
    }

還可以做一個安全的措施,本地備份數(shù)據(jù)庫 Laravel定時任務(wù)備份數(shù)據(jù)庫

性能測試

開啟opcache

composer dump-autoload --optimize

不開啟opcache
ab -c 100 -n 1000 localhost:8002/phpinfo

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/1.10.2
Server Hostname:        localhost
Server Port:            8002

Document Path:          /test
Document Length:        92827 bytes

Concurrency Level:      100
Time taken for tests:   4.171 seconds
Complete requests:      1000
Failed requests:        140
   (Connect: 0, Receive: 0, Length: 140, Exceptions: 0)
Write errors:           0
Total transferred:      92989847 bytes
HTML transferred:       92826847 bytes
Requests per second:    239.74 [#/sec] (mean)
Time per request:       417.113 [ms] (mean)
Time per request:       4.171 [ms] (mean, across all concurrent requests)
Transfer rate:          21771.20 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.8      0       4
Processing:    29  394  74.6    388     628
Waiting:       27  392  74.6    385     625
Total:         32  394  74.2    388     629

Percentage of the requests served within a certain time (ms)
  50%    388
  66%    407
  75%    445
  80%    451
  90%    479
  95%    517
  98%    557
  99%    570
 100%    629 (longest request)

==開啟opcache==

yum install php7.*-opcache (根據(jù)當(dāng)前php版本做選擇)
php -i | grep opcache.ini
修改 opcache.ini

// 大部分維持默認(rèn)值,少部分值可以根據(jù)業(yè)務(wù)做調(diào)整
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=64
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.save_comments=1
opcache.fast_shutdown=0
ab -c 100 -n 1000 localhost:8002/phpinfo

Benchmarking localhost (be patient)
; Enable Zend OPcache extension module
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests


Server Software:        nginx/1.10.2
Server Hostname:        localhost
Server Port:            8002

Document Path:          /test
Document Length:        93858 bytes

Concurrency Level:      100
Time taken for tests:   0.657 seconds
Complete requests:      1000
Failed requests:        298
   (Connect: 0, Receive: 0, Length: 298, Exceptions: 0)
Write errors:           0
Total transferred:      94021119 bytes
HTML transferred:       93858119 bytes
Requests per second:    1522.02 [#/sec] (mean)
Time per request:       65.702 [ms] (mean)
Time per request:       0.657 [ms] (mean, across all concurrent requests)
Transfer rate:          139747.77 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    1   1.4      0       6
Processing:    15   61  15.8     54     119
Waiting:       10   61  15.9     54     119
Total:         19   61  15.9     54     121

Percentage of the requests served within a certain time (ms)
  50%     54
  66%     56
  75%     62
  80%     69
  90%     89
  95%    100
  98%    108
  99%    114
 100%    121 (longest request)
可以看到并發(fā)大概提升了10倍,達(dá)到了1522qps(當(dāng)然這是沒有DB交互以及接口調(diào)用的簡單輸出響應(yīng)測試),平均響應(yīng)時間和數(shù)據(jù)傳輸速度提升了6-7倍。

在生產(chǎn)環(huán)境運(yùn)行 composer dump-autoload --optimize

composer autoload 慢的主要原因在于來自對 PSR-0 和 PSR-4 的支持,加載器得到一個類名時需要到文件系統(tǒng)里查找對應(yīng)的類文件位置,這導(dǎo)致了很大的性能損耗,當(dāng)然這在我們開發(fā)時還是有用的,這樣我們添加的新的類文件就能即時生效。 但是在生產(chǎn)模式下,我們想要最快的找到這些類文件,并加載他們。

composer dump-autoload --optimize 這個命令的本質(zhì)是將 PSR-4/PSR-0 的規(guī)則轉(zhuǎn)化為了 classmap 的規(guī)則, 因為 classmap 中包含了所有類名與類文件路徑的對應(yīng)關(guān)系,所以加載器不再需要到文件系統(tǒng)中查找文件了。可以從 classmap 中直接找到類文件的路徑。

注意事項

建議開啟 opcache , 這樣會極大的加速類的加載。

php5.5 以后的版本中默認(rèn)自帶了 opcache 。

這個命令并沒有考慮到當(dāng)在 classmap 中找不到目標(biāo)類時的情況,當(dāng)加載器找不到目標(biāo)類時,仍舊會根據(jù)PSR-4/PSR-0 的規(guī)則去文件系統(tǒng)中查找

高可用問題思考

數(shù)據(jù)傳輸量過大可能導(dǎo)致的問題

RSA加密失敗

請求超時

數(shù)據(jù)庫存儲并發(fā)

列隊失敗重試和堵塞

數(shù)據(jù)操作日志監(jiān)控和到達(dá)率監(jiān)控

未完待續(xù).....

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29920.html

相關(guān)文章

  • Lumen---為速度而生的 Laravel 框架

    摘要:什么是官網(wǎng)是一個由組件搭建而成的微框架是當(dāng)前最快的框架之一在什么時候使用專為微服務(wù)或者設(shè)計舉個例子如果你的應(yīng)用里面有部分業(yè)務(wù)邏輯的請求頻率比較高就可以單獨把這部分業(yè)務(wù)邏輯拿出來使用來構(gòu)建一個小因為是對優(yōu)化了框架的加載機(jī)制所以對資源的要求少很 什么是 Lumen?官網(wǎng) lumen 是一個由 Laravel 組件搭建而成的微框架,是當(dāng)前最快的 PHP 框架之一! 在什么時候使用 Lume...

    104828720 評論0 收藏0
  • 如何在Lumen中使用Elasticsearch

    摘要:之前受到這篇為你的站點插上的翅膀的啟發(fā)就嘗試在中引入,并完成中文索引。關(guān)于中文索引谷歌上關(guān)于中文搜索的文章有很多,例如這篇。中文索引中涉及的內(nèi)容比較多,下次再用一個篇幅來分析。 如何在Lumen中使用Elasticsearch 前言 Lumen是基于Laravel核心組件的微框架,隨著Laravel5的發(fā)布,目前版本也已經(jīng)到5了。之前受到這篇為你的站點插上ElasticSearch...

    jubincn 評論0 收藏0
  • 網(wǎng)易容器云平臺的微服務(wù)實踐(一)

    摘要:本文是網(wǎng)易容器云平臺的微服務(wù)化實踐系列文章的第一篇。網(wǎng)易容器云平臺的前身是網(wǎng)易應(yīng)用自動部署平臺,它能夠利用云提供的基礎(chǔ)設(shè)施,實現(xiàn)包括構(gòu)建和部署一體化在內(nèi)的整個應(yīng)用生命周期管理。目前網(wǎng)易云容器服務(wù)團(tuán)隊以的方式管理著微服務(wù),每周構(gòu)建部署次數(shù)。 此文已由作者馮常健授權(quán)網(wǎng)易云社區(qū)發(fā)布。 歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗。 摘要:網(wǎng)易云容器平臺期望能給實施了微服務(wù)架構(gòu)的團(tuán)隊提供完...

    zhjx922 評論0 收藏0
  • 個推基于Docker和Kubernetes的微服務(wù)實踐

    摘要:個推針對服務(wù)場景,基于和搭建了微服務(wù)框架,提高了開發(fā)效率。三容器化在微服務(wù)落地實踐時我們選擇了,下面將詳細(xì)介紹個推基于的實踐。 2016年伊始Docker無比興盛,如今Kubernetes萬人矚目。在這個無比需要創(chuàng)新與速度的時代,由容器、微服務(wù)、DevOps構(gòu)成的云原生席卷整個IT界。個推針對Web服務(wù)場景,基于OpenResty和Node.js搭建了微服務(wù)框架,提高了開發(fā)效率。在微服...

    yibinnn 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<