這些5萬就能買到的超帥SUV!別告訴我你還沒關注…

對於年輕人來說,沒有比在某個周末的午後跟秋名山上的五菱宏光來一場速度與激情更讓人愉快了。雖然東南DX3的配置也很屌(全系標配ESp車身穩定系統),但光一副漂亮的臉蛋跟一副超運動的底盤就足夠讓各位年輕人買單了。一本真經的騷長安CS15廠商指導價:5。

作為祖國的花朵,作為人類的未來,年輕人自個買一輛又酷又炫的SUV作為代步的工具是一件天經地義的事情。然鵝,途觀、CX-5那些動輒十多萬的起步價實在是讓一眾騷年的錢包羞澀。難道年輕人擁有一輛“狂拽酷炫屌炸天”的SUV就這麼難?難道上天就這般刻薄我們祖國的花朵們?!當然不是!下面就讓我給大家推薦幾款年輕人都能夠輕鬆擁有的SUV車型!

狂拽酷炫屌的騷

比亞迪元

廠商指導價:5.99-24.98萬

犀利的開眼角大燈搭上展翼式的鍍鉻飾條,整個前臉頗有幾分梁朝偉式的帥氣。車身的側面富有心思地運用了三腰線的設計,動感、立體,彷彿是見人就懟的姿勢。更要命的是,大膽前衛的雙色車身設計,簡直是街上少女們的最愛。從設計的角度來說,這是一輛能夠幫你解決單身問題的SUV。

當然,年輕人用車也是很講究的。配置絕不能馬虎。你只需要付出6.99萬的代價,就能夠得到一鍵啟動、無匙進入、ESp車身穩定系統、陡坡緩降、自動大燈、大燈延時關閉、自動空調等一堆看起來極屌的配置。要是你是一個對裝逼孜孜不倦的人,那你還可以多加1萬,然後再得到前排側氣囊、胎壓監測、定速巡航、全景天窗、外后視鏡加熱等屌得不能再屌的配置。連廣告語我都幫比亞迪想好了:比亞迪元,決不在你裝逼的時候掉鏈子。

瑪莎拉蒂式的騷

東南DX3

廠商指導價:6.79-9.99萬

雖然比亞迪已經很努力地為中國年輕人的裝逼事業而奮鬥,但是另一廂的東南汽車也並沒有閑着,跟世界著名的汽車設計公司賓尼法利納一起倒騰出東南DX3。這個賓尼法利納得着重提及一下:作為世界最著名的汽車設計公司,瑪莎拉蒂總裁、法拉利599GTB等牛逼車型都出自它之手。

就跟賓尼法利納這個名字一樣,東南DX3也採用了一個相當個性的外觀設計。細長的進氣中網、精緻的大燈結構、超級上揚的動感腰線,再搭配上跟比亞迪元同款的雙色車身設計,想想就足夠地讓人雞凍。哪怕在多年以後,你依然能夠抬起頭驕傲地跟其他人說:我這車,賓尼法利納設計的。當然,東南還很逆天地給東南DX3配上了一副前麥弗遜后多連桿的底盤,完全是稱霸同級的節奏。對於年輕人來說,沒有比在某個周末的午後跟秋名山上的五菱宏光來一場速度與激情更讓人愉快了。雖然東南DX3的配置也很屌(全系標配ESp車身穩定系統),但光一副漂亮的臉蛋跟一副超運動的底盤就足夠讓各位年輕人買單了。

一本真經的騷

長安CS15

廠商指導價:5.79-7.79萬

CS75、CS35賣得那麼火,長安不搞個小型SUV怎麼能說得過去?!於是乎長安CS15就來了。和它的老大哥們一樣,CS15依舊很好地繼承了長安一流的造車品質。尤其在行車品質的表現上,行駛時的靜澀性完全不亞於一輛合資緊湊型轎車。內飾的做工、用料等等細節,它的精緻程度也大大領先於其他的同級車型。

造型上面,CS15套了一套長安最新的家族式設計,視覺比起CS35都要更顯動感、幹練一些。尤其前臉的擴散式中網,是同級車型里相當少見的設計。搭配上開眼角大燈,一下子把前臉的立體感增強不少。這種深邃又迷人的設計,同樣的價位,你只能在CS15上面看到了。此外,長安的設計師真的是骨子里的騷包。還給CS15配了4個花瓣式的雙色輪轂,效果完全等同於AJ限量版上腳,那種活潑、騷包的氣息撲面而來。如果你又想騷、又想靠譜,還想價格不高,我想CS15絕壁是一個極好的選擇。

總結

我就是我,是顏色不一樣的煙火!誰說年輕人買不起SUV的?!誰說年輕人就應該刻苦耐勞,走路上班的?!如今,你只需要5.79萬就能夠過上有車一族!去你想去的地方,泡你想泡的女神。看到這裏,難道你還在壓抑自己的內心?!趕緊買買買買買買買買買啊!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

SpringSceurity(4)—短信驗證碼功能實現

SpringSceurity(4)—短信驗證碼功能實現

有關SpringSceurity系列之前有寫文章

1、SpringSecurity(1)—認證+授權代碼實現

2、SpringSecurity(2)—記住我功能實現

3、SpringSceurity(3)—圖形驗證碼功能實現

一、思考

1、設計思路

在獲取短信驗證碼功能和圖形驗證碼還是有很多相似的地方,所以這裡在設計獲取短信驗證的時候,將之前開發好的的圖形驗證碼進一步整合、抽象與重構。

在獲取驗證碼的時候,它們最大的不同在於: 圖形驗證碼是通過接口返回獲取給前端。而短信驗證碼而言是通過第三方API向我們手機推送

但是它們在登陸的時候就有很大的不同了,對於圖形驗證碼而言驗證通過之前就走 UsernamePasswordAuthenticationFilter 過濾器了開始校驗用戶名密碼了。

但對於短信登陸而言,確實也需要先現在短信驗證碼是否通過,但是一旦通過他是不走 UsernamePasswordAuthenticationFilter,而是通過其它方式查詢用戶信息來校驗

認證已經通過了。

這篇博客只寫獲取獲取短信驗證碼的功能,不寫通過短信驗證碼登陸的邏輯。

2、重構設計

這裏才是最重要的,如何去設計和整合短信驗證碼和圖形驗證碼的代碼,是我們最應該思考的。如何將相似部分抽離出來,然後去實現不相同的部分。

整理后發現不同點主要在於

 1、獲取驗證碼。因為對於圖形驗證碼需要有個畫布,而短信驗證碼並不需要,所以它們可以實現同一個接口,來完成不同的邏輯。
 2、發送驗證碼。對於圖形驗證碼來講只要把驗證碼返給前端就可以,而短信驗證碼而言是通過第三方API將驗證碼發到我們的手機上。
    所以這裏也可以通過實現統一接口來具體實現不同的方法。

相同部分我可以通過抽象類來完成實現,不同部分可以通過具體的實現類來實現。

AbstractValidateCodeProcessorService 抽象類是用來實現兩種驗證碼可以抽離的部分。ImageCodeProcessorServiceImpl

SmsCodeProcessorServiceImpl方法是來實現兩種驗證碼不同的發送方式。

在簡單看下時序圖可能會更加明白點。

一個接口只有一個方法(processor)就是處理驗證碼,它其實需要做三件事。

 1、獲取驗證碼。2、將驗證碼存入session。3、將驗證碼信息通過短信或者圖形驗證碼發送出去。

首先講生成獲取驗證碼,這裡有一個公共接口和兩個實現類

對於保存驗證碼信息而言,可以在直接在 AbstractValidateCodeProcessorService抽象類來完成,都不需要去實現。

對發送驗證碼信息而言,只需要實現AbstractValidateCodeProcessorService抽象類的send發送驗證碼接口即可。

整個大致接口設計就是這樣,具體的可以通過代碼來展示。

二、代碼實現

1、驗證碼屬性

短信驗證碼和圖形驗證后包含屬性有 codeexpireTime,短信驗證碼只有這兩個屬性,而圖形驗證碼還多一個BufferedImage實例對象屬性,所以將共同屬性進行抽取

,抽取為ValidateCode類,代碼如下:

ValidateCode實體

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ValidateCode {

    private String code;

    private LocalDateTime expireTime;

    public boolean isExpired() {
        return LocalDateTime.now().isAfter(expireTime);
    }

}

對於圖形驗證碼而言,除了需要code和過期時間還需要圖片的畫布,所以繼承ValidateCode之後再寫自己屬性

ImageCode實體

@Data
public class ImageCode extends ValidateCode {

    private BufferedImage image;

    public ImageCode(BufferedImage image, String code, LocalDateTime expireTime) {
        super(code, expireTime);
        this.image = image;
    }

    public ImageCode(BufferedImage image, String code, int expireIn) {
        super(code, LocalDateTime.now().plusSeconds(expireIn));
        this.image = image;
    }
}

對於短信驗證碼而言,暫時不需要添加自己的屬性字段了。

SmsCode實體

public class SmsCode extends ValidateCode {

    public SmsCode(String code, LocalDateTime expireTime) {
        super(code, expireTime);
    }

    public SmsCode(String code, int expireIn) {
        super(code, LocalDateTime.now().plusSeconds(expireIn));
    }
}

2、ValidateCodeProcessor接口

ValidateCodeProcessor接口主要是完成 驗證碼的生成、保存與發送的完整流程,接口的主要設計如下所示:

ValidateCodeProcessorService接口

public interface ValidateCodeProcessorService {

    /**
     * 因為現在有兩種驗證碼,所以存放到seesion的key不能一樣,所以前綴+具體type
     */
    String SESSION_KEY_PREFIX = "SESSION_KEY_FOR_CODE_";
    /**
     * 通過也是 type+CODE_PROCESSOR獲取對於的bean
     */
    String CODE_PROCESSOR = "CodeProcessorService";

    /**
     * 這個接口要做三件事
     * 1、獲取驗證碼。
     * 2、將驗證碼存入session
     * 3、將驗證碼信息通過短信或者圖形驗證碼發送出去。
     * (將spring-boot-security-study-03接口裡的那三步進行里封裝)
     *
     */
    void processor(ServletWebRequest request) throws Exception;

由於圖片驗證碼和短信驗證碼的 生成和保存、發送等流程是固定的。所以這裏寫一個抽象類來實現ValidateCodeProcessor接口,來實現相似部分。

AbstractValidateCodeProcessorService抽象類

@Component
public abstract class AbstractValidateCodeProcessorService<C> implements ValidateCodeProcessorService {

    private static final String SEPARATOR = "/code/";

    /**
     * 操作session的工具集
     */
    private SessionStrategy sessionStrategy = new HttpSessionSessionStrategy();

    /**
     * 這是Spring的一個特性,就是在項目啟動的時候會自動收集系統中 {@link ValidateCodeGeneratorService} 接口的實現類對象
     *
     * key為bean name
     */
    @Autowired
    private Map<String, ValidateCodeGeneratorService> validateCodeGeneratorMap;

    @Override
    public void processor(ServletWebRequest request) throws Exception {
        //第一件事
        C validateCode = generate(request);
        //第二件事
        save(request, validateCode);
        //第三件事
        send(request, validateCode);
    }

    /**
     * 生成驗證碼
     *
     */
    private C generate(ServletWebRequest request) {
        String type = getProcessorType(request);
        //這裏 image+CodeGenerator = imgCodeGenerator 對應的就是ImageCodeGeneratorServiceService
        ValidateCodeGeneratorService validateCodeGenerator = validateCodeGeneratorMap.get(type.concat(ValidateCodeGeneratorService.CODE_GENERATOR));
        return (C) validateCodeGenerator.generate(request);
    }

    /**
     * 保存驗證碼到session中
     */
    private void save(ServletWebRequest request, C validateCode) {
        //這裏也是封裝了一下
        sessionStrategy.setAttribute(request, SESSION_KEY_PREFIX.concat(getProcessorType(request).toUpperCase()), validateCode);
    }

    /**
     * 發送驗證碼 (只有發送驗證碼是需要自己去實現的。)
     */
    protected abstract void send(ServletWebRequest request, C validateCode) throws Exception;

    /**
     * 獲取請求URL中具體請求的驗證碼類型
     *
     */
    private String getProcessorType(ServletWebRequest request) {
        // 獲取URI分割后的第二個片段 (/code/image 通過/code/ 切割后就只剩下 image
        return StringUtils.substringAfter(request.getRequest().getRequestURI(), SEPARATOR);
    }
}

簡單說明

1、這裏用到了Spring一個特性就是Map<String, ValidateCodeGeneratorService> validateCodeGeneratorMap 可以把ValidateCodeGeneratorService所以的實現類都放
到這個map中,key為bean的名稱。

2、抽象類中實現了 ValidateCodeProcessor接口的processor方法,它主要是完成了驗證碼的創建、保存和發送的功能。

3、generate 方法根據傳入的不同泛型而生成了特定的驗證碼。

4、save 方法是將生成的驗證碼實例對象存入到session中,兩種驗證碼的存儲方式一致,只是有個key不一致,所以代碼也是通用的。

5、send 方法一個抽象方法,分別由ImageCodeProcessorService和SmsCodeProcessorService來具體實現,也是根據泛型來判斷具體調用哪一個具體的實現類的send方法。

3、驗證碼的生成接口

上面說過驗證的生成應該也是通過實現類

ValidateCodeGeneratorService

public interface ValidateCodeGeneratorService {

    /**
     * 這個常量也是用來 type+CodeGeneratorService獲取對於bean對象
     */
    String CODE_GENERATOR = "CodeGeneratorService";

    /**
     * 生成驗證碼
     * 具體是圖片驗證碼 還是短信驗證碼就需要對應的實現類
     */
    ValidateCode generate(ServletWebRequest request);
}

圖形驗證碼具體實現類

mageCodeGeneratorServiceImpl

@Data
@Component("imageCodeGeneratorService")
public class ImageCodeGeneratorServiceImpl implements ValidateCodeGeneratorService {

    private static final String IMAGE_WIDTH_NAME = "width";
    private static final String IMAGE_HEIGHT_NAME = "height";
    private static final Integer MAX_COLOR_VALUE = 255;

    @Autowired
    private ValidateCodeProperties validateCodeProperties;

    @Override
    public ImageCode generate(ServletWebRequest request) {
        int width = ServletRequestUtils.getIntParameter(request.getRequest(), IMAGE_WIDTH_NAME, validateCodeProperties.getImage().getWidth());
        int height = ServletRequestUtils.getIntParameter(request.getRequest(), IMAGE_HEIGHT_NAME,validateCodeProperties.getImage().getHeight());
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();

        Random random = new Random();

        // 生成畫布
        g.setColor(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);
        g.setFont(new Font("Times New Roman", Font.ITALIC, 20));
        g.setColor(getRandColor(160, 200));
        for (int i = 0; i < 155; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            int xl = random.nextInt(12);
            int yl = random.nextInt(12);
            g.drawLine(x, y, x + xl, y + yl);
        }

        // 生成数字驗證碼
        StringBuilder sRand = new StringBuilder();
        for (int i = 0; i < validateCodeProperties.getImage().getLength(); i++) {
            String rand = String.valueOf(random.nextInt(10));
            sRand.append(rand);
            g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
            g.drawString(rand, 13 * i + 6, 16);
        }

        g.dispose();

        return new ImageCode(image, sRand.toString(), validateCodeProperties.getImage().getExpireIn());
    }

    /**
     * 生成隨機背景條紋
     *
     * @param fc 前景色
     * @param bc 背景色
     * @return RGB顏色
     */
    private Color getRandColor(int fc, int bc) {
        Random random = new Random();
        if (fc > MAX_COLOR_VALUE) {
            fc = MAX_COLOR_VALUE;
        }
        if (bc > MAX_COLOR_VALUE) {
            bc = MAX_COLOR_VALUE;
        }
        int r = fc + random.nextInt(bc - fc);
        int g = fc + random.nextInt(bc - fc);
        int b = fc + random.nextInt(bc - fc);
        return new Color(r, g, b);
    }
}

短信驗證碼具體實現類

SmsCodeGeneratorServiceImpl

@Data
@Component("smsCodeGeneratorService")
public class SmsCodeGeneratorServiceImpl implements ValidateCodeGeneratorService {

    @Autowired
    private ValidateCodeProperties validateCodeProperties;


    @Override
    public SmsCode generate(ServletWebRequest request) {
        //生成隨機數
        String code = RandomStringUtils.randomNumeric(validateCodeProperties.getSms().getLength());
        return new SmsCode(code, validateCodeProperties.getSms().getExpireIn());
    }
}

4、驗證碼的發送邏輯類

獲取的實現類寫好了,我們在寫發送具體的發送實現類,發送類的實現類是實現AbstractValidateCodeProcessorService抽象類的。

圖片發送實現類

ImageCodeProcessorServiceImpl

@Component("imageCodeProcessorService")
public class ImageCodeProcessorServiceImpl extends AbstractValidateCodeProcessorService<ImageCode> {

    private static final String FORMAT_NAME = "JPEG";

    /**
     * 發送圖形驗證碼,將其寫到相應中
     *
     * @param request   ServletWebRequest實例對象
     * @param imageCode 驗證碼
     */
    @Override
    protected void send(ServletWebRequest request, ImageCode imageCode) throws Exception {
        ImageIO.write(imageCode.getImage(), FORMAT_NAME, request.getResponse().getOutputStream());
    }
}

短信發送具體實現類。這裏只是後台輸出就好了,實際中只要接入對於的SDK就可以了。

SmsCodeProcessorServiceImpl

@Component("smsCodeProcessorService")
public class SmsCodeProcessorServiceImpl extends AbstractValidateCodeProcessorService<SmsCode> {
    private static final String SMS_CODE_PARAM_NAME = "mobile";

    @Override
    protected void send(ServletWebRequest request, SmsCode smsCode) throws Exception {
        //這裡有一個參數也是前端需要傳來的 就是用戶的手機號
        String mobile = ServletRequestUtils.getRequiredStringParameter(request.getRequest(), SMS_CODE_PARAM_NAME);
        // 這裏僅僅寫個打印,具體邏輯一般都是調用第三方接口發送短信
        System.out.println("向手機號為:" + mobile + "的用戶發送驗證碼:" + smsCode.getCode());
    }

整個大致就是這樣,我們再來測試一下。

三、測試

1、ValidateCodeController接口

獲取驗證碼接口

@RestController
@Slf4j
public class ValidateCodeController {


    @Autowired
    private  Map<String, ValidateCodeProcessorService> validateCodeProcessorMap;


    @RequestMapping("/code/{type}")
    public void createCode(HttpServletRequest request, HttpServletResponse response, @PathVariable String type) throws Exception {
        if(!StringUtils.equalsAny(type, "image", "sms")){
            log.info("type類型錯誤 type={}",type);
            return;
        };

        //根據type獲取具體的實現類
        ValidateCodeProcessorService validateCodeProcessorService = validateCodeProcessorMap.get(type.concat(ValidateCodeProcessorService.CODE_PROCESSOR));
        validateCodeProcessorService.processor(new ServletWebRequest(request, response));

    }

}

2、獲得圖形驗證碼

獲取成功

3、獲取短信驗證碼

獲取短信驗證碼需要多傳一個參數就是mobile 手機號碼

因為這裏發送短信沒有接第三方SDK,而是直接在控制台輸出

參考

1、Spring Security技術棧開發企業級認證與授權(JoJo)

這一套架構設計真的非常的好,代碼可讀性和可用性都非常高,以後如果要接第三個驗證碼只要實現發送和獲取的接口來自定義實a現就好了。很受啟發!

別人罵我胖,我會生氣,因為我心裏承認了我胖。別人說我矮,我就會覺得好笑,因為我心裏知道我不可能矮。這就是我們為什麼會對別人的攻擊生氣。
攻我盾者,乃我內心之矛(20)

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計最專業,超強功能平台可客製化

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家公司費用怎麼算?

架構C02:商業模式與架構設計

商業模式與架構設計:A段架構與B段架構

《思考軟件創新設計:A段架構師思考技術》 A段架構師必須具備鮮活的創新思維,睿智的策略思考,犀利的洞察力和靈活的戰術才能把握稍縱即逝的商機                                                       

 

 

 

 

 

 

 

 

 

 

 

  

  段架構師 B段架構師
關注點 產品策略規劃 實踐策略,執行能力,技術變遷
協作對象 協助產品經理 協助研發經理生產經理
思維的差異 獲利思維,知彼才能在複雜商業環境生存 成本思維,知己才能在成本和收益做出合適選擇

 

                目前我們所接觸的大多是B段技術的架構,更關注“知己”,我們做研發改進,敏捷管理,技術重構,就是為了更好的平衡技術的成本和業務的收益  

 A段架構與商業模式:以不變應萬變

 

架構師需要考慮的商業要素

決策前(A段設計)—->決策點—>決策后(B段設計)  

商業思維三要素:商業模式,架構模式,創新產品

 

軟件是現實世界的映射和抽象

現實世界是複雜多變的,所以由需求就是複雜多變的,軟件也是複雜多變的, 所以現實中組織要發展就要面對變化的適合的變化,反應到軟件上也會隨需求的變化而變化,所以軟件本質上是一個演化的系統,是一個複雜的系統  

商業與技術的關係

商業維度,現實世界是複雜多變的組織需要不停的適應市場的變化, 從產品維度需要不停的創新滿足客戶和市場的需求, 而從技術和架構的維度來看,架構則希望更少的信息熵,用更少的技術元素來表述更多的業務結構,這也正是為什麼我們追求模型,模式,結構與算法  

 商業和產品做加法,架構設計做減法 

在複雜的現實中,用簡單的抽象來支撐商業的變化,用靈活的設計支持業務的創新   《深奧的簡潔》是一本科普讀物,裏面講述了碎行,自我組織,自我類似等等自然界好些美妙的規律 https://zh.wikipedia.org/wiki/%E5%88%86%E5%BD%A2#%E7%A4%BA%E4%BE%8B    

大樹的隱喻描述商業,架構,研發技術生產管理

大樹的上層是枝恭弘=叶 恭弘,要吸收陽光雨露,要開花結果,是對外界展示的活躍和生機的一面,這裏用來表述商業模式和創新產品 這些都是要變化的部分,而且收外部影響較明顯   再次是樹榦是中層A段架構,中層要求穩既要約束和輔助枝恭弘=叶 恭弘發展和繁榮又要保護下層樹根承受壓力   下層部分的話就是B段架構,生產,技術,管理,這些是看不見但是很重要的元素,是整個樹木生命繁榮的根本    

從複雜中抽象出簡單,用簡單和較少信息熵,應對複雜多變的商業和產品

簡單的有序的產品和架構設計,通過一定的約束組合可以形成一個富有活力的系統,底層元素的簡單又保證了它可以包容現實中的複雜變化,應對紛繁複雜的現實情況,支持商業的變革和產品的創新    

B段架構技術和業務的矛盾:用成本收益作為衡量標準

 

變的是需求和技術,不變的是成本與收益評估,是要創造價值的目標

  “你這個功能啥時候能上? ” “這個有難度目前不行,需要做重構,技術細節blablabla…” “提這麼多需求沒幾個有用的,根本不懂技術實現,你要覺的能行為啥你不上”   產品和技術的矛盾點: 1. 資源的搶佔 2. 成本的評估 3.內外部目標的差異 4.內部目標設定不合理  

解決問題:業務知識+成本核算

技術要了解業務背景,業務收益,要解決的問題是什麼?只有這樣才能解決問題,做出架構設計,做出模型設計,解決業務問題,幫助客戶解決現實場景的問題  

優秀的架構要融和技術與業務的平衡和成本收益的評估

  1. 清晰服務業務短期目標,明確技術定位,輔助實現當前階段業務訴求 2. 協調技術資源投入和分配 3. 進行成本與收益的評估,確定做哪些,不做那些,先做那些,怎麼做收益更大 4. 預留長期技術規劃和儲備  

我們是解決昨日之債務,還是準備迎接今日之挑戰?

衡量的標準就是做這件事的收益?   產品和業務做哪些收益更大:產品的願景和價值觀 本年度看做哪些收益更大(OKR) 本季度本月做哪些收益最大(月度發版路標規劃) 當天本周做哪些收益最大(周計劃)  

舊系統的改造 OR 新技術的引進?

技術儲備和技術棧規劃方面: 中小型創業型公司,非技術驅動的公司 關注中長期發展的技術與趨勢,不要太超前,不必做小白鼠   舊系統改造方面: 假如不能明顯的產生業務價值,單純的把報表生成把半小時優化到5分鐘,不如做一些其他更有業務價值的任務 假如沒有其他高附件值任務可以去做,假如報表生成佔用研發時間減少了質量保證時間,影響了交付質量也可以去做  

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

關於Graph Convolutional Network的初步理解

  為給之後關於圖卷積網絡的科研做知識積累,這裏寫一篇關於GCN基本理解的博客。GCN的本質是一個圖網絡中,特徵信息的交互+與傳播。這裏的圖指的不是圖片,而是數據結構中的圖,圖卷積網絡的應用非常廣泛 ,經常被舉到的典型例子就是一個空間中熱量的傳遞和交互,這裏不多作贅述。

一、圖卷積網絡與普通卷積網絡的應用範圍

  圖卷積網絡為什麼叫圖卷積網絡呢?圖卷積網絡,其實就是就是GCN,但GCN為什麼是圖神經網絡呢?小編也很疑惑。

  好了!開玩笑的話先打住,進入正題。首先複習一下卷積神經網絡的工作原理,以檢測圖片的過程為例,卷積神經網絡提取圖片特徵的過程,其實就是對每個像素周邊像素加權求和的過程,初始每個像素對應的卷積核的權重隨機,在通過反向傳遞、逐層梯度下降的優化之後才會得到合理的權重,根據這個權重得到的feature map便是特徵提取的結果。對於圖像等像素排列規整的結構來說,使用普通的卷積神經網絡提取特徵沒有任何問題,但對於某些形如交通網、電網等“不整齊”的結構,普通的CNN就沒有用武之地了,引用知乎大佬學術性的話講,就是“CNN在Non Euclidean Structure的數據上無法保持平移不變性”,翻譯成人話就是對於圖結構的數據,其每個點鄰接的數量各不相同,會給CNN提取特徵帶來很大的困難;要提取圖結構的空間特徵進行後續的機器學習,就需要使用圖卷積網絡。簡而言之,GCN是CNN的升級版,CNN做不到的,GCN可以做,GCN做的到的,CNN做不到。

二、圖卷積網絡提取空間特徵的方式

  提取拓撲圖空間特徵有兩種方法:空間領域與譜領域。這裏我只對譜領域的提取方法作總結概述(空間領域的沒學),通過定義圖上的傅里恭弘=叶 恭弘變換,圖的卷積方式得到表示方式,與深度學習結合得到最終的圖卷積網絡。在進行傅里恭弘=叶 恭弘和卷積的推導前先複習一下線代?一張圖的拉普拉斯矩陣一般為其度矩陣D減去其鄰接矩陣A,其他常見定義也有D-1LD與D-1L。

1.圖的特徵分解

  對圖的拉普拉斯矩陣進行譜分解,說的通俗易懂一點就是對角化。使用拉普拉斯矩陣進行運算的優勢在這裏體現:拉普拉斯矩陣滿足譜分解所需線性無關的條件。圖的拉普拉斯矩陣分解形式為UPU-1,其中U=[u1,u2,…,un],為列向量是單位特徵向量的矩陣;P為含有n個特徵值的對角矩陣。

2.含特徵向量與特徵值矩陣的傅里恭弘=叶 恭弘變換定義

  在瀏覽一些大佬的博客與知乎時我常常感到詫異:進行完矩陣分解后怎麼突然講到傅里恭弘=叶 恭弘變化了?理清思路后發現相關矩陣傅里恭弘=叶 恭弘變換的定義是最後卷積公式推導的基礎,由於兩函數的卷積是其函數傅立恭弘=叶 恭弘變換乘積的逆變換,即:

  為了能將針對圖的傅里恭弘=叶 恭弘變換類比代入上述公式,我們需要推廣傅里恭弘=叶 恭弘變換,把特徵函數 eiωt 變為拉普拉斯矩陣的特徵向量。

  由傅里恭弘=叶 恭弘變換的一般形式:

  類比特徵方程定義:

LV=λV

  L、V、λ分別代表拉普拉斯矩陣、特徵向量/函數、特徵值。將特徵向量與前面定義的u矩陣對應,得到最終圖的傅里恭弘=叶 恭弘變換定義為:

 

  其中f(i)對應圖的各個頂點,ux*(i)表示第x個特徵向量的第 i 個分量。那麼特徵值λx下F的圖傅里恭弘=叶 恭弘變換就是與λx對應的特徵向量ux進行內積運算。矩陣形式為:

  即f^=UT f。同時由傅里恭弘=叶 恭弘逆變換基本公式:

  得到傅里恭弘=叶 恭弘逆變換的矩陣形式:

  

  即f=Uf^

3.圖卷積推導  

  在定義完圖上的傅里恭弘=叶 恭弘變換之後,總算要開始讓夢想照進現實將卷積運算推廣到圖上了。由卷積定理:

     將對應圖上各點的f與卷積核h的傅里恭弘=叶 恭弘定義代入其中,卷積核在圖上的傅里恭弘=叶 恭弘變換被定義為:

  按卷積定理將兩者傅里恭弘=叶 恭弘變換形式相乘得到:

  最後乘U求得傅立恭弘=叶 恭弘變換乘積的逆變換,最終得到卷積:

  以上,GCN粗略的推導過程就整理完畢了。

 

  參考網站: https://www.zhihu.com/question/54504471?sort=created

        https://www.cnblogs.com/h2zZhou/p/8405717.html

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

巴西肉品包裝廠成病毒溫床 2400員工染疫!

摘錄自2020年6月02日ETtoday報導

巴西勞工檢察官辦公室今(2日)表示,境內最南端的南大河州累計武漢肺炎(COVID-19)確診病例約9000例,其中超過1/4為肉品工廠工人。

路透社報導,巴西勞工檢察官聲明表示,約有2399名分散在南大河州(Rio Grande do Sul)18個城市、24座屠宰場的員工遭到感染。根據巴西衛生部統計數據,這個數字相當於南大河州累計到昨天為止共9332起病例的25.7%。

這項發現證實肉品包裝工廠已成巴西疫情溫床。巴西肉品包裝業巨頭JBS SA和BRF SA都在南大河州設有工廠。兩家公司位於當地的工廠先前都曾因爆發新型冠狀病毒疫情而暫時關閉。

生活環境
國際新聞
巴西
武漢肺炎
群聚感染
肉品加工

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

TopGear主持人全程嚇尿!連英女王都要出來看他漂移

從地上出來之後,遇到一對新人結婚,兩人還摻了一腳,在新郎一臉懵逼之下再度絕塵而去,看他的表情一定是沒看過Topgear吧。接下來鏡頭又給到了兩人,Ken Block通過倫敦塔橋后鑽進了倫敦街頭藝術聖地Banksy Tunnel,眼尖的Matt看到了有人在噴STIG,這套路實在滿分。

距離Ken Block上一部大作已經過去了好一陣子了,對於很多車迷來說他的漂移表演必定是足夠震撼,也非常有個人風格。而最近,Topgear官方就推出了一條他在23季Topgear中的剪輯加長版,今天也讓大家先睹為快。

在片中,Ken Block先是裝在集裝箱內,被軍用運輸機運到目的地,然後開着座駕Hoonicorn Mustang破籠而出。

一路狂甩之下遇到了站在路邊無所事事的Topgear主持人Matt LeBlanc,然後把他兜上車,繼續絕塵而去。

一上車Matt LeBlanc就拿着本導遊手冊開始bb,Ken Block則一路狂漂,又是圍着火車轉,又是繞着拖頭漂,都是很典型的KenBlock戲碼。

隨後的路線就非常有衝擊力了,進入倫敦市中心后在大馬路上任性的跑,最後從升降機跑到地下通道,通過抄小道上演了一出火花四濺的飛車好戲。

從地上出來之後,遇到一對新人結婚,兩人還摻了一腳,在新郎一臉懵逼之下再度絕塵而去,看他的表情一定是沒看過Topgear吧。

接下來鏡頭又給到了兩人,Ken Block通過倫敦塔橋后鑽進了倫敦街頭藝術聖地Banksy Tunnel,眼尖的Matt看到了有人在噴STIG,這套路實在滿分。

兩人一路向白金漢官狂奔而去,雖然Matt一路叨叨讓Ken Block規矩點,但這很明顯是多餘的勸告。最後他們在警察的護送下到達白金漢官,一腳原地轟油轟出了英女王的橋段真是有點讓人尷尬。

至此全片進入尾聲,雖然Matt一再手賤要研究車內手剎上的紅按鈕是什麼東西,但最後Ken Block還是不太想鳥他 。然後直升機徐徐起飛,全片結束。

整個片子單獨剪輯過後確實更加緊湊精彩,所有橋段、鏡頭和路線的設定都是滿屏的Ken Block風格,雖說三賤的離去是沒法挽回了,但至少Topgear在製作 上還是保持了很高的水準。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計最專業,超強功能平台可客製化

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家公司費用怎麼算?

汽車評測視頻居然是這樣拍出來的

而且AT變速器在換擋的時候因為有液力變矩器的原因,不會有動力中斷的感覺,雖然在換擋速度上和老款雙離合有差距,不過搭配了渦輪發動機后,前段扭矩比較充足,不需要作過多的降檔動作,所以日常開會覺得這套動力總成的平順感要由於老款。

很多網友都很好奇,我們的汽車節目是怎樣拍出來的,也很想知道,我們平時工作用什麼車。

除了平常每天評測拍攝的汽車外,我們還會拿到一些長期測試車輛做一些選題,因為有時候一款車好或不好,或者有沒有一些暗病小問題,不是在一天两天里能試出來的。最近我們視頻部拿了一台新福克斯EcoBoost 180來做長期測試車,看看在每天高強度使用的情況下,這台車的表現如何。

我們對工作車的訴求很簡單:動力好、操控佳、油耗低、空間夠用。也就是和大部分的車主需求一樣。

因為我們拍攝很大一部分內容都是性能車,所以拍攝車的性能必須要跟上,不然速度太慢的話鏡頭就顯得不夠動感;但同時每次拍攝又有油耗預算,相比起The Grand Tour 4000萬一集的預算,我們每一條評測只有200元的油費預算,超過的費用我們要自己補上。分享一下新福克斯這段時間開下來的感受。

動力:

除了幾家日系廠家還在堅持使用自然吸氣外,在這個級別里渦輪增壓已經成為主流。我們常說的動力好,其實除了加速外,更重要是動力的匹配。相比使用自然吸氣匹配雙離合變速器的老款,我更喜歡使用1.5T 發動機匹配6AT的新福克斯。因為新的變速器在換擋邏輯和頓挫表現要大大優於老款,簡單來說就是更聽話。給換擋指令的時候,雖然有一定的延時,但每次的時間基本上都是一樣的,所以會感覺這台發動機很可控。

而且AT變速器在換擋的時候因為有液力變矩器的原因,不會有動力中斷的感覺,雖然在換擋速度上和老款雙離合有差距,不過搭配了渦輪發動機后,前段扭矩比較充足,不需要作過多的降檔動作,所以日常開會覺得這套動力總成的平順感要由於老款。此外,更另外欣慰的是,手動換擋模式的按鈕從老款的檔把換到了方向盤上,覺得這才是一個合乎人類操作的位置。

油耗:

拿到車的時候,是廣東的秋冬季節,我們測得的平均油耗大概在8.7L左右,屬於可以接受的範圍。比較驚喜的是在激烈駕駛時油耗並不會升高太多,在外地賽車場跟拍一天後居然還剩下不少的燃油返回廣州。

空間:

由於經常需要運載不少的拍攝器材,所以兩廂的設計對於我們來說更實用。雖然後排乘坐空間不如一些實用型家轎,但福克斯後排座椅放倒后是一個平整的空間,更方便休息,而且也能放下我們的超長拍攝器材。

懸挂調教:

在市區的路況下懸挂的跳動顯得有點多,家用取向的消費者可能要考慮清楚。不過到了山路或者賽道就會覺得福克斯的動態很可控,車感很好。一台車的操控不在於能在彎中開多快,而是車輛和駕駛者的交流有多少。沒到極限的時候給予司機充足的信心,而將要到極限的時候透響胎等信號告訴駕駛者要減速,這就是所謂的人車交流。

與福克斯相處了一段時間后,覺得這車在各方面的表現都很平衡,非常適合對操控和動力有追求,但又要顧及一定實用性的車主。

作為性能控,現在我更想試試把2.3T EcoBoost發動機壓榨至350馬力的福克斯RS。

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

中國自主品牌領跑者 長安汽車11月份銷量點評

其實CS15也瓜分CS35一部分銷量,因兩款車型車身尺寸基本相當,而長安CS15卻還要便宜,這也不能忽略自動擋車型的上市,也有效提高長安CS15銷量,畢竟現在城市路況,駕馭自動擋更加舒適而年輕消費群體也更愛自動擋車型。長安汽車-悅翔(系列)11月銷量:10263輛編者點評:悅翔系列與艾瑞澤5以及新遠景相比,悅翔過萬銷量並不算好,其實個人覺得長安不能把重點都放在SUV車型上,如果注重轎車一定會有另外一番作為,長安還是要拿出更多的誠意來打動消費者。

面對現今汽車市場,每個品牌都有所突破,而長安作為中國自主品牌領先者,也為中國車企做了個好榜樣,今年1-10月,長安品牌汽車銷售141.8萬輛,銷量位於自主品牌第一。

日前,長安汽車官方公布了2016年11月產銷快報,其中長安CS75銷量突破了2萬輛,逸動以及悅翔兩大橋車系列在11月份銷量也突破了一萬輛,具體銷量數據如下:

長安汽車-長安CS75

指導價:9.28-15.88萬

11月銷量:21978輛

編者點評:長安CS75面對榮威RX5以及吉利博越的熱銷,絲毫沒有影響其銷量,11月份銷量更是達到了21978輛,這也可以說明消費群體不同,長安CS75更實用外觀設計也偏沉穩。也不能忽略購置稅減半金融政策,臨近年底,也能刺激消費者購車慾望,而長安CS75也最大功臣莫過於1.5T車型,帶動着長安CS75銷量一路攀升。

長安汽車-長安CS35

指導價:7.89-9.89萬

11月銷量:13902輛

編者點評:長安CS35外觀設計比較個性,配置也豐富,底盤調教很紮實,舒適性表現還是相當不錯,長安CS35主要目標也是年輕消費者,而長安CS35面對哈弗H2、瑞風S3等強實力选手,瓜分市場群體銷量份額,這也讓長安CS35銷量下降了26%。

長安汽車-長安CS15

指導價:5.79-7.79萬

11月銷量:10430輛

編者點評:長安CS15可以說取得比較不錯成績,11月份銷量也終於突破了1萬輛。其實CS15也瓜分CS35一部分銷量,因兩款車型車身尺寸基本相當,而長安CS15卻還要便宜,這也不能忽略自動擋車型的上市,也有效提高長安CS15銷量,畢竟現在城市路況,駕馭自動擋更加舒適而年輕消費群體也更愛自動擋車型。

長安汽車-悅翔(系列)

11月銷量:10263輛

編者點評:悅翔系列與艾瑞澤5以及新遠景相比,悅翔過萬銷量並不算好,其實個人覺得長安不能把重點都放在SUV車型上,如果注重轎車一定會有另外一番作為,長安還是要拿出更多的誠意來打動消費者。

長安汽車-逸動

指導價:8.09-24.99萬

11月銷量:10571

編者點評:長安逸動本月銷量同比下跌33%,其實只要原因是,長安品牌車型,更新換代較慢、配置不夠豐富是逸動硬傷,或許長安應該學習下吉利,更新換代快,而且在配置上面是誠意滿滿,綜合實力強。但整體來說逸動綜合能力也不算差。

長安汽車-長安CX70

指導價:6.89-8.49萬

11月銷量:10125

編者點評:長安CX70自打銷量過萬,其一直維持在一萬輛左右的水平。銷量難以突破主要原因,還是因為這款車沒有配備自動車型,畢竟現在成熟路況駕馭自動擋會更舒適,就算是新手駕馭也不會手忙腳亂。其次還是自主品牌車型越來越多,競爭力也越來越強,9月份上市的東風風光580等車車型表現很有競爭力,而CX70面臨的壓力也越來越大,也希望長安能儘快推出自動擋車型,可能會有所改善。

全文總結:

其實在11月份,長安汽車旗下已經有8款車型銷量過萬,這個成績也相當不錯。但長安汽車品牌也不能鬆懈,畢竟競爭力會越來越大,反而長安應該更注重轎車市場,如果在轎車市場更注重,可能會有另一番作為。長安汽車接下來的銷量依然會面臨很大壓力。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

Kubernetes日誌的6個最佳實踐

本文轉自Rancher Labs

Kubernetes可以幫助管理部署在Pod中的上百個容器的生命周期。它是高度分佈式的並且各個部分是動態的。一個已經實現的Kubernetes環境通常涉及帶有集群和節點的幾個系統,這些系統託管着幾百個容器,而這些容器不斷地基於工作負載啟動、毀滅。

當在Kubernetes中處理大量的容器化應用和工作負載時,主動進行監控和調試錯誤十分重要。在容器、節點或集群級別,這些錯誤都能在容器中看到。Kubernetes的日誌機制是一個十分重要的組件,可以用來管理和監控服務以及基礎設施。在Kubernetes中,日誌可以讓你跟蹤錯誤甚至可以調整託管應用程序的容器的性能。

配置stdout(標準輸出)和stderr(標準錯誤)數據流

圖片來源:kubernetes.io

第一步是理解日誌是如何生成的。通過Kubernetes,日誌會被發送到兩個數據流——stdout和stderr。這些數據流將寫入JSON文件,並且此過程由Kubernetes內部處理。你可以配置將哪個日誌發送到哪個數據流中。而一個最佳實踐的建議是將所有應用程序日誌都發送到stdout並且所有錯誤日誌都發送到stderr。

決定是否使用Sidecar模型

Kubernetes建議使用sidecar容器來收集日誌。在這一方法中,每個應用程序容器將有一個鄰近的“streaming容器”,該容器將會將所有日誌流傳輸到stdout和stderr。Sidecar模型可以幫助避免在節點級別公開日誌,並且它可以讓你控制容器級別的日誌。

然而,這一模型的問題是它能夠適用於小容量的日誌記錄,如果面對大規模的日誌記錄,可能會造成大量資源被佔用。因此,你需要為每個正在運行的應用程序容器單獨運行一個日誌容器。在Kubernetes文檔中,將sidecar模型形容為“幾乎沒有很大的開銷”。需要由你決定是否嘗試這一模型並在選擇它之前查看它所消耗的資源類型。

替代方法是使用日誌代理,該代理在節點級別收集日誌。這樣可以減少開銷,並確保安全地處理日誌。Fluentd已成為大規模聚合Kubernetes日誌的最佳選擇。它充當Kubernetes與你要使用Kubernetes日誌的任意數量的端點之間的橋樑。你也可以選擇像Rancher這樣的Kubernetes管理平台,在應用商店已經集成了Fluentd,無需從頭開始安裝配置。

確定Fluentd可以更好地匯總和路由日誌數據后,下一步就是確定如何存儲和分析日誌數據。

選擇日誌分析工具:EFK或專用日誌記錄

傳統上,對於以本地服務器為中心的系統,應用程序日誌存儲在系統中的日誌文件中。這些文件可以在定義的位置看到,也可以移動到中央服務器。但是對於Kubernetes,所有日誌都發送到磁盤上/var/log的JSON文件中。這種類型的日誌聚合併不安全,因為節點中的Pod可以是臨時的也可以是短暫的。刪除Pod時,日誌文件將丟失。如果你需要嘗試對部分日誌數據丟失進行故障排除時,這可能很難。

Kubernetes官方推薦使用兩個選項:將所有日誌發送到Elasticsearch,或使用你選擇的第三方日誌記錄工具。同樣,這裏存在一個潛在的選擇。採用Elasticsearch路線意味着你需要購買一個完整的堆棧,即EFK堆棧,包括Elasticsearch、Fluentd和Kibana。每個工具都有其自己的作用。如上所述,Fluentd可以聚合和路由日誌。Elasticsearch是分析原始日誌數據並提供可讀輸出的強大平台。Kibana是一種開源數據可視化工具,可以從你的日誌數據創建漂亮的定製dashboard。這是一個完全開源的堆棧,是使用Kubernetes進行日誌記錄的強大解決方案。

儘管如此,有些事情仍然需要牢記。Elasticsearch除了由名為Elastic的組織構建和維護,還有龐大的開源社區開發人員為其做貢獻。儘管經過大量的實踐檢驗,它可以快速、強大地處理大規模數據查詢,但在大規模操作時可能會出現一些問題。如果採用的是自我管理(Self-managed)的Elasticsearch,那麼需要有人了解如何構建大規模平台。

替代方案是使用基於雲的日誌分析工具來存儲和分析Kubernetes日誌。諸如Sumo Logic和Splunk等工具都是很好的例子。其中一些工具利用Fluentd來將日誌路由到他們平台,而另一些可能有它們自己的自定義日誌代理,該代理位於Kubernetes中的節點級別。這些工具的設置十分簡單,並且使用這些工具可以花費最少的時間從零搭建一個可以查看日誌的dashboard。

使用RBAC控制對日誌的訪問

在Kubernetes中身份驗證機制使用的是基於角色訪問控制(RBAC)以驗證一個用戶的訪問和系統權限。根據用戶是否具有特權(authorization.k8s.io/decision )並向用戶授予原因(authorization.k8s.io/reason ),對在操作期間生成的審核日誌進行註釋。默認情況下,審核日誌未激活。建議激活它以跟蹤身份驗證問題,並可以使用kubectl進行設置。

保持日誌格式一致

Kubernetes日誌由Kubernetes架構中不同的部分生成。這些聚合的日誌應該格式一致,以便諸如Fluentd或FluentBit的日誌聚合工具更易於處理它們。例如,當配置stdout和stderr或使用Fluentd分配標籤和元數據時,需要牢記這一點。這種結構化日誌提供給Elasticsearch之後,可以減少日誌分析期間的延遲。

在日誌收集守護進程上設置資源限制

由於生成了大量日誌,因此很難在集群級別上管理日誌。DaemonSet在Kubernetes中的使用方式與Linux類似。它在後台運行以執行特定任務。Fluentd和filebeat是Kubernetes支持的用於日誌收集的兩個守護程序。我們必須為每個守護程序設置資源限制,以便根據可用的系統資源來優化日誌文件的收集。

結 論

Kubernetes包含多個層和組件,因此對其進行良好地監控和跟蹤能夠讓我們在面對故障時從容不迫。Kubernetes鼓勵使用無縫集成的外部“Kubernetes原生”工具進行日誌記錄,從而使管理員更輕鬆地獲取日誌。文章中提到的實踐對於擁有一個健壯的日誌記錄體繫結構很重要,該體繫結構在任何情況下都可以正常工作。它們以優化的方式消耗計算資源,並保持Kubernetes環境的安全性和高性能。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

網頁設計最專業,超強功能平台可客製化

※回頭車貨運收費標準

疫情改變通勤方式 雅加達自行車需求看漲

摘錄自2020年06月21日中央通訊社印尼報導

受武漢肺炎疫情影響,可健身又可避開大眾運輸人潮的自行車成為通勤最佳選擇。雅加達省政府指出,疫情後自行車族增加,兩大主要幹道每天固定時段都會隔出臨時自行車道。

印尼第一大報羅盤報(Kompas)19日報導,雅加達使用中的自行車道只有25公里,仍在計劃、施工、驗收中的自行車道有63公里。雅加達自6月初逐漸鬆綁為控制2019冠狀病毒疾病(COVID-19,武漢肺炎)疫情實施的管制措施,民眾陸續恢復上班。

雅加達省政府交通局長夏孚林(Syafrin Liputo)指出,雅加達省政府近日已開始與警方合作,每天固定時段會在雅加達中區的蘇迪爾曼大道(Sudirman)和塔林大道(Thamrin)兩條主要幹道,使用路錐,隔出臨時自行車道,方便自行車族使用,全長約14公里。

自行車業者表示,疫情初期業績暴跌,最近業績突然成長,賣最好的是折疊式腳踏車,因為民眾勤於運動,需求大增,他要向供應商調貨也遇到供貨吃緊的問題。

生活環境
能源轉型
國際新聞
印尼
雅加達
自行車
武漢肺炎
疫情下的食衣住行
交通運輸

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!