Կառուցեք առաձգական ծրագրային ճարտարապետություններ AI-ի վրա հիմնված հավելվածների համար. | B4N1

Կառուցեք առաձգական ծրագրային ճարտարապետություններ AI-ի վրա հիմնված հավելվածների համար.

9 months ago · b4n1 Read time: 5 min

Ներածություն

Արհեստական ինտելեկտի (AI) ինտեգրումը ծրագրային ապահովման ծրագրերին հեղափոխություն է արել խնդիրների լուծման, որոշումների կայացման և ավտոմատացման մոտեցումներում: Այնուամենայնիվ, քանի որ AI-ի վրա հիմնված հավելվածները դառնում են ավելի բարդ, դրանք նաև ավելի խոցելի են դառնում առաջացող սպառնալիքների նկատմամբ, ինչպիսիք են deepfakes-ը և AI-ի վրա հիմնված ավտոմատացումը: Այս հոդվածում մենք կուսումնասիրենք ծրագրային ճարտարապետության նախագծման առաջադեմ տեխնիկան, որը կարող է արդյունավետ կերպով ինտեգրել AI բաղադրիչները՝ միաժամանակ ապահովելով մասշտաբայնություն և անվտանգություն:

AI-ի վրա հիմնված հավելվածների մարտահրավերները

AI-ի վրա հիմնված հավելվածները բնութագրվում են տվյալներից սովորելու, նոր իրավիճակներին հարմարվելու և ինքնուրույն որոշումներ կայացնելու ունակությամբ: Այնուամենայնիվ, սա նաև նշանակում է, որ նրանք ավելի ենթակա են հարձակումների, որոնք ուղղված են իրենց AI բաղադրիչներին: AI-ի վրա հիմնված հավելվածների հետ կապված որոշ մարտահրավերներ ներառում են.

  • Deepfakes. AI-ի կողմից ստեղծված կեղծ տեսանյութեր, աուդիո ձայնագրություններ կամ պատկերներ, որոնք կարող են օգտագործվել օգտատերերին խաբելու կամ անվտանգության համակարգերը խախտելու համար:
  • AI-ի վրա հիմնված ավտոմատացում. AI-ով աշխատող բոտեր, որոնք կարող են ավտոմատացնել հարձակումները, տարածել չարամիտ ծրագրեր կամ խաթարել զգայուն տվյալները:
  • Տվյալների թունավորում. AI մոդելները կարող են վերապատրաստվել թունավորված տվյալների վրա, ինչը հանգեցնում է կողմնակալ կամ ոչ ճշգրիտ արդյունքների:
  • Մոդելի արդյունահանում. հարձակվողները կարող են կորզել զգայուն տեղեկատվություն AI մոդելներից՝ վտանգելով դրանց անվտանգությունը:

Ռազմավարություններ մասշտաբայնության համար

AI-ի վրա հիմնված հավելվածների համար ճկուն ծրագրային ճարտարապետություն ստեղծելու համար մենք պետք է կենտրոնանանք մասշտաբայնության վրա: Scalability-ը վերաբերում է համակարգի ունակությանը կարգավորելու ավելացած բեռը, երթևեկությունը կամ տվյալները առանց կատարողականությունը խախտելու: Ահա մի քանի ռազմավարություն՝ AI-ի վրա հիմնված հավելվածներում մասշտաբայնության հասնելու համար.

1. Microservices Architecture

Microservices ճարտարապետությունը նախագծման օրինաչափություն է, որը կառուցում է հավելվածը որպես փոքր, անկախ ծառայությունների հավաքածու, որոնք միմյանց հետ շփվում են API-ների միջոցով: Այս մոտեցումը թույլ է տալիս ավելի մեծ ճկունություն, մասշտաբայնություն և սխալների հանդուրժողականություն:

«Պիթոն».

Միկրոծառայությունների ճարտարապետության օրինակ Python-ում

կոլբայի ներմուծումից Flask, jsonify flask_sqlalchemy ներմուծման SQLAlchemy-ից

հավելված = Flask (name) app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///example.db" db = SQLAlchemy (հավելված)

դասի Օգտագործող (db.Model): id = db.Column(db.Integer,primary_key=True) անուն = db.Column(db.String(100), nullable=False)

@app.route("/users", մեթոդներ=["GET"]) def get_users(): օգտվողներ = User.query.all() վերադարձնել jsonify ([{"id": user.id, "name": user.name} օգտագործողների համար])

եթե անուն == «հիմնական»: app.run (debug=True)


### 2. Կոնտեյներացում

Կոնտեյներացումը տեխնիկա է, որը փաթեթավորում է հավելվածը և դրա կախվածությունները մեկ կոնտեյների մեջ, որը կարող է գործարկվել ցանկացած հարթակում: Այս մոտեցումը թույլ է տալիս ավելի մեծ շարժունակություն, մասշտաբայնություն և անվտանգություն:

``գնացեք
// Կոնտեյներացման օրինակ Go-ում
փաթեթի հիմնական

ներմուծում (
	«fmt»
	«մատյան»

	«github.com/docker/docker/api/types/container»
	«github.com/docker/docker/api/types/network»
	«github.com/docker/docker/client»
)

func main() {
	cli, err := client.NewClientWithOpts(client.FromEnv)
	եթե սխալվում է != զրոյական {
		log.Fatal(սխալ)
	}

	containerConfig := &container.Config{
		Պատկեր՝ «օրինակ/պատկեր»,
		Env՝ []string{"EXAMPLE_VAR=example"},
	}

	networkConfig:= &network.NetworkingConfig{
		EndpointsConfig՝ քարտեզ[string]*network.EndpointSettings{
			"example-network"՝ {},
		},
	}

	resp, err := cli.ContainerCreate(context.Background(), containerConfig, networkConfig, զրոյական, զրոյական, "")
	եթե սխալվում է != զրոյական {
		log.Fatal(սխալ)
	}

	fmt.Println (resp.ID)
}

3. Առանց սերվերի ճարտարապետություն

Առանց սերվերի ճարտարապետությունը դիզայնի օրինաչափություն է, որը կառուցում է հավելվածը որպես գործառույթների հավաքածու, որոնք կատարվում են ըստ պահանջի, առանց սերվերների տրամադրման կամ կառավարման անհրաժեշտության: Այս մոտեցումը թույլ է տալիս ավելի մեծ մասշտաբայնություն, ճկունություն և ծախսարդյունավետություն:

`` ժանգ // Rust-ում առանց սերվերի ճարտարապետության օրինակ օգտագործել lambda_runtime::{Համատեքստ, Սխալ}; օգտագործել serde_json::json;

#[tokio::main] async fn main() -> Արդյունք<(), Սխալ> { թող func = lambda_runtime::run!( handler); func(Համատեքստ::default()).սպասե՞լ; Լավ (()) }

async fn handler(_event: lambda_runtime::Event, _context: Context) -> Արդյունք<lambda_runtime::Result, Error> { թող արդյունքը = json!({ «statusCode»: 200, «body»: «Բարև Լամբդայից», }); Ok(lambda_runtime::Արդյունք::from(արդյունք)) }


## Անվտանգության ռազմավարություններ

AI-ի վրա հիմնված հավելվածների համար ճկուն ծրագրային ճարտարապետություն ստեղծելու համար մենք պետք է կենտրոնանանք նաև անվտանգության վրա: Անվտանգությունը վերաբերում է համակարգի կարողությանը պաշտպանվելու չարտոնված մուտքից, տվյալների խախտումներից կամ այլ վնասակար գործողություններից: Ահա մի քանի ռազմավարություններ՝ AI-ի վրա հիմնված հավելվածներում անվտանգության հասնելու համար.

### 1. Տվյալների գաղտնագրում

Տվյալների գաղտնագրումը տեխնիկա է, որը խառնում է տվյալները՝ կանխելու չարտոնված մուտքը: Այս մոտեցումը թույլ է տալիս ավելի մեծ անվտանգություն, գաղտնիություն և ամբողջականություն:

«Պիթոն».
# Python-ում տվյալների կոդավորման օրինակ
cryptography.fernet import Fernet-ից

բանալի = Fernet.generate_key()
cipher_suite = Fernet (բանալի)

տվյալներ = b"Բարև, աշխարհ!"
encrypted_data = cipher_suite.encrypt(տվյալներ)
տպել (գաղտնագրված_տվյալներ)

decrypted_data = cipher_suite.decrypt(encrypted_data)
տպել (գաղտնազերծված_տվյալներ)

2. Մուտքի վերահսկում

Մուտքի վերահսկումը տեխնիկա է, որը կարգավորում է, թե ովքեր կարող են մուտք գործել զգայուն տվյալներ կամ կատարել որոշակի գործողություններ: Այս մոտեցումը թույլ է տալիս ավելի մեծ անվտանգություն, հաշվետվողականություն և համապատասխանություն:

``գնացեք // Մուտքի վերահսկման օրինակ Go-ում փաթեթի հիմնական

ներմուծում ( «fmt» «մատյան»

«github.com/dgrijalva/jwt-go»

)

func main() { նշան := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "օգտանուն": "օրինակ", «դեր»՝ «ադմին», })

tokenString, err := token.SignedString([]byte("գաղտնի"))
եթե սխալվում է != զրոյական {
	log.Fatal(սխալ)
}

fmt.Println(tokenString)

}


### 3. Անոմալիաների հայտնաբերում

Անոմալիաների հայտնաբերումը տեխնիկա է, որը բացահայտում է տվյալների արտասովոր ձևերը կամ վարքագիծը: Այս մոտեցումը թույլ է տալիս ավելի մեծ անվտանգություն, հայտնաբերում և արձագանքում:

`` ժանգ
// Ռուստում անոմալիաների հայտնաբերման օրինակ
օգտագործել rand::Rng;
օգտագործել std::collections::HashMap;

fn main() {
    թող mut rng = rand::thread_rng();
    թող mut տվյալները = HashMap::new();

    համար _ 0..100 {-ում
        թող արժեքը = rng.gen_range (0..100);
        data.insert (արժեք, արժեք);
    }

    թող mut անոմալիաներ = Vec::new();

    համար (բանալին, արժեքը) data.iter()-ում {
        եթե *key > 50 && *արժեք > 50 {
            anomalies.push(key.clone());
        }
    }

    println!("{:?}", անոմալիաներ);
}

Վիզուալիզացիա

Ահա Chart.js-ի օգտագործմամբ վիզուալիզացիայի օրինակ՝ այս հոդվածում քննարկված մասշտաբայնությունը և անվտանգության ռազմավարությունները ցուցադրելու համար:

{
  «տեսակ»՝ «բար»,
  "տվյալներ": {
    «պիտակներ»՝ [«Microservices», «Containerization», «Serverless»],
    «տվյալների հավաքածուներ»:
      {
        "label": "Scalability",
        «տվյալներ»: [10, 20, 30],
        "backgroundColor":
          «rgba(255, 99, 132, 0.2)»,
          «rgba(54, 162, 235, 0.2)»,
          «rgba(255, 206, 86, 0.2)»
        ],
        «սահմանի գույն»՝ [
          «rgba(255, 99, 132, 1)»,
          «rgba(54, 162, 235, 1)»,
          «rgba(255, 206, 86, 1)»
        ],
        «սահմանի լայնություն»՝ [1, 1, 1]
      },
      {
        «պիտակ»: «Անվտանգություն»,
        «տվյալներ»: [20, 30, 40],
        "backgroundColor":
          «rgba(255, 99, 132, 0.2)»,
          «rgba(54, 162, 235, 0.2)»,
          «rgba(255, 206, 86, 0.2)»
        ],
        «սահմանի գույն»՝ [
          «rgba(255, 99, 132, 1)»,
          «rgba(54, 162, 235, 1)»,
          «rgba(255, 206, 86, 1)»
        ],
        «սահմանի լայնություն»՝ [1, 1, 1]
      }
    ]
  },
  «Ընտրանքներ»: {
    «կշեռքներ»: {
      «yAxes»:
        {
          "ticks": {
            «beginAtZero»: ճիշտ է
          }
        }
      ]
    }
  }
}

Այս վիզուալիզացիան ցույց է տալիս յուրաքանչյուր ռազմավարության մասշտաբայնությունը և անվտանգության առավելությունները՝ միկրոծառայություններով, որոնք ցույց են տալիս ամենաբարձր մասշտաբայնությունը, իսկ առանց սերվերի՝ ամենաբարձր անվտանգությունը:

Եզրակացություն

AI-ի վրա հիմնված հավելվածների համար ճկուն ծրագրային ճարտարապետություն կառուցելը պահանջում է մասշտաբայնության և անվտանգության ռազմավարությունների համադրություն: Կենտրոնանալով միկրոծառայությունների ճարտարապետության, կոնտեյներացման և առանց սերվերի ճարտարապետության վրա՝ մենք կարող ենք հասնել ավելի մեծ մասշտաբայնության և ճկունության: Կենտրոնանալով տվյալների գաղտնագրման, մուտքի վերահսկման և անոմալիաների հայտնաբերման վրա՝ մենք կարող ենք հասնել ավելի մեծ անվտանգության և պաշտպանության: Համատեղելով այս ռազմավարությունները՝ մենք կարող ենք կառուցել ծրագրային ճարտարապետություններ, որոնք և՛ մասշտաբային են, և՛ անվտանգ, և կարող են արդյունավետ կերպով ինտեգրել AI բաղադրիչները՝ միաժամանակ ապահովելով մեր հավելվածների անվտանգությունն ու ամբողջականությունը:

Հղումներ

  • [1] Մարտին Ֆաուլերի «Microservices Architecture»:
  • [2] «Կոնտեյներացում» Դոկերի կողմից
  • [3] «Առանց սերվերի ճարտարապետություն» AWS-ի կողմից
  • [4] «Տվյալների գաղտնագրում»՝ կրիպտոգրաֆիայի միջոցով
  • [5] «Մուտքի վերահսկում» JWT-ի կողմից
  • [6] «Անոմալիաների հայտնաբերում» մեքենայական ուսուցման միջոցով

Նշում. Այս հոդվածը միայն կրթական նպատակներով է և չպետք է դիտարկվի որպես AI-ի վրա հիմնված հավելվածների համար ճկուն ծրագրային ճարտարապետություններ կառուցելու համապարփակ ուղեցույց:


Have Questions?

Let's Talk

Contact me on LinkedIn